2011-10-27 9 views
9

मैं एक्सकोड में नई स्टोरीबोर्ड सुविधा सीखने की कोशिश कर रहा हूं और मैंने मोड संपादित करने के लिए UITableView सेट करने की कोशिश करने में एक समस्या में भाग लिया है।आईफोन स्टोरीबोर्ड एक टेबल व्यू संपादित करना

अब तक मेरी स्टोरीबोर्ड इस तरह दिखता है:

navigationController -> UIViewController (tableview संपत्ति के साथ उपवर्ग)

मैं एक नेविगेशन आइटम और देखने नियंत्रक दृश्य करने के लिए एक बार बटन आइटम जोड़ा, तो मैं देख पा रहे हैं एक संपादन बटन। यह स्वचालित रूप से कुछ भी नहीं किया, इसलिए मैंने टेबलव्यू प्रतिनिधि के सेट एडिटिंग विधि में इसके चयनकर्ता को जोड़ने का प्रयास किया। इसने इसे संपादन मोड में डाल दिया। हालांकि, संपादन बटन "पूर्ण" बटन में नहीं बदला गया था और इसलिए संपादन मोड से बाहर निकलने का कोई तरीका नहीं है।

क्या मुझे पूर्ण बटन के लिए एक और नेविगेशन आइटम बनाना है? मैं इसे कैसे कनेक्ट करूं ताकि यह सही समय पर दिखाई दे और सही तरीके से काम करता हो?

उत्तर

13

मैं सिर्फ स्टोरीबोर्ड उन का उपयोग शुरू किया, तो मैं भी मेरी संपादन बटन जोड़ने के लिए स्टोरीबोर्ड उपयोग करना चाहता था। नए उपकरण का उपयोग करने के तरीके को सीखने के लिए समय निकालना मुश्किल है, लेकिन आपको छेद को पकड़ने के लिए नलिका टेप की एक रोल की आवश्यकता है।

आप इसे काम पर ला सकते हैं, लेकिन कस्टम बटन जोड़ने की आवश्यकता है। गुण निरीक्षक में सुनिश्चित करें कि पहचानकर्ता कस्टम है और शीर्षक संपादित किया गया है।

फिर अपने मीटर में कुछ इस तरह जोड़ने

- (IBAction)setEditMode:(UIBarButtonItem *)sender { 
    if (self.editing) { 
     sender.title = @"Edit"; 
     [super setEditing:NO animated:YES]; 
    } else { 
     sender.title = @"Done"; 
     [super setEditing:YES animated:YES]; 
    } 
} 

अपने कस्टम संपादित करें बटन फोन setEditMode विधि है।

केवल उम्मीद कर सकते हैं कि वे भविष्य में स्टोरीबोर्ड संपादक में संपादन बटन के कार्यान्वयन को ठीक करेंगे।

5

यदि आप दृश्य नियंत्रक को धक्का देने के लिए नेविगेशन नियंत्रक का उपयोग कर रहे हैं, तो बस self.navigationItem.rightBarButtonItem = self.editButtonItem; सेट करें, जो दाईं ओर डिफ़ॉल्ट संपादन बटन डाल देगा। यदि नेविगेशन बार दिखाई नहीं दे रहा है, तो self.navigationController.navigationBarHidden = NO; पर कॉल करें। उन्हें viewDidLoad विधि, या कुछ समान में बुलाया जाएगा।

- (void)setEditing:(BOOL)editing animated:(BOOL)animated { 
    [super setEditing:editing animated:animated]; 
    [tableView setEditing:editing animated:animated]; 
} 

यही कारण है कि आप इसे क्या करना चाहते हैं क्या करना चाहिए: फिर आदेश संपादित पुकार का जवाब देना tableView प्राप्त करने के लिए, निम्न विधि का उपयोग करें। यदि आपके पास कोई समस्या है, तो बस इतना कहें और हम विवरण

+1

हाँ, मुझे पता है कि इसे प्रोग्रामिक तरीके से कैसे करना है, लेकिन मैं इसे स्टोरीबोअर के माध्यम से पूरा करने की कोशिश कर रहा हूं डी यूआई – markplee

+0

यह काफी समान होना चाहिए। मैं स्टोरीबोर्ड यूआई का भी उपयोग कर रहा हूं (जो मुझे कहना है कि जीवन को बहुत आसान बनाता है) और इसी तरह की चीजें करना पड़ता है और इसी तरह मैं इसके बारे में सोचता हूं। मैंने देखा है कि कभी-कभी आपको अपने स्वैच्छिक में वांछित दृश्य प्राप्त करने के लिए 'self.parentViewController.navigationItem.rightBarButtonItem = yourButton;' के माध्यम से जाना होगा। लेकिन बाकी को पहले से ही उतना ही रहना चाहिए जितना आपकी टेबल व्यू व्यू कंट्रोलर से आईबीओलेट – justin

+0

के रूप में जुड़ा हुआ है क्या इसके बारे में कोई खबर है? नई स्टोरीबोर्ड सुविधा के साथ एक एलओसी को प्रतिस्थापित करने का तरीका जानने का प्रयास कर रहे थे। बस नेविगेशन बार में एक बटन डालने और इसे "संपादित करें" नामकरण निश्चित रूप से काम नहीं करता है। ;) –

27

मुझे लगता है कि स्टोरीबोर्ड के साथ, एक काम करने के लिए एकमात्र तरीका (निश्चित रूप से, सबसे आसान) काम करने के लिए संपादन/किया गया बटन है,

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
... 
//set the edit button 
self.navigationItem.leftBarButtonItem = self.editButtonItem; 
... 

यह समाधान है कि एप्पल अपने आप को लागू करता है अगर आप अपनी परियोजना के लिए एक "मास्टर-विस्तार से आवेदन" टेम्प्लेट चुनें है: निम्नलिखित कोड का उपयोग करें।

शायद स्टोरीबोर्ड अभी भी सही नहीं है, और उम्मीद है कि यह अगले विज्ञप्ति में एप्पल से सुधार किया जाएगा ...

6

संक्षेप में:

बटन, UIViewController.editButtonItem द्वारा लौटाए गए विशेष व्यवहार है कि - (void)setEditing:(BOOL)editing animated:(BOOL)animated कॉल करता है, तो दबाया के साथ एक विशेष टॉगल बटन है।

बटन, UINavigationController.editButtonItem द्वारा लौटाया गया एक साधारण बटन है, जिसे "संपादन" के साथ लेबल किया गया है।

स्टोरीबोर्ड बाद वाले को चुनने की अनुमति देता है।

1

कोई स्टोरीबोर्ड संपादक से संपादन बटन नहीं काम कर रहा है और फिर प्रोग्रामेटिक रूप से इसे UIViewController.editButtonItem के साथ बदल सकता है।

viewDidLoad में

:

NSMutableArray *toolbarItems = [NSMutableArray arrayWithArray:self.toolbarItems]; 

[toolbarItems replaceObjectAtIndex:0 withObject:self.editButtonItem]; 

[self setToolbarItems:toolbarItems];  

इस कोड को मान लिया गया एक स्टोरीबोर्ड में उपकरण पट्टी पर वाम-पंथी आइटम के रूप में गूंगा संपादित करें बटन जोड़ा गया है।

+0

यह थोड़ा हैकी है लेकिन संपादन बटन को फिर से कार्यान्वित करना बेहतर है। – SeanR

+0

इसके बारे में हैकी क्या है? धन्यवाद – kitschmaster

+0

बटन के साथ इंटरफ़ेस बिल्डर में जोड़े गए बटन को प्रतिस्थापित करने के लिए कोड का उपयोग करना वास्तव में एक हैक जैसा लगता है ... लेकिन यह ऐप्पल के हिस्से पर एक कमी है जो हमें इस तरह से करने के लिए मजबूर करता है। मुझे गलत मत समझो, मुझे लगता है कि इंटरफ़ेस बिल्डर में वास्तविक संपादन बटन का समर्थन करने वाले ऐप्पल से यह सबसे अच्छा समाधान है। – SeanR

2

@ ग्राहम उत्तर में जोड़ने के लिए, आप शैली को भी बदलना चाहेंगे ताकि आपके पास "पूर्ण" बटन शैली (नीला रंग) हो। कुछ इस तरह:

- (IBAction)setEditMode:(UIBarButtonItem *)sender { 
    if (self.editing) { 
     sender.title = @"Edit"; 
     sender.style = UIBarButtonItemStylePlain; 
     [super setEditing:NO animated:YES]; 
    } else { 
     sender.title = @"Done"; 
     sender.style = UIBarButtonItemStyleDone; 
     [super setEditing:YES animated:YES]; 
    } 
} 
1

में मामला है कि आप UIViewController है और इस के अंदर आप एक UITableView गयी। आप UITableView के साथ बातचीत करने में एक संपादन UIBarButton जोड़ना चाहते हैं, तो कोशिश:

इस लाइन को शामिल करें ...

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    ... 

    self.navigationItem.leftBarButtonItem = self.editButtonItem; 

    ... 
} 

और इस विधि

- (void)setEditing:(BOOL)editing animated:(BOOL)animated { 

    [super setEditing:editing animated:animated]; 
    [self.myListTableView setEditing:editing animated:animated]; 

    if(self.myListTableView.editing) { 
     NSLog(@"editMode on"); 
    } else { 
     NSLog(@"editMode off"); 
    } 
} 

जहां

@property (weak, nonatomic) IBOutlet UITableView *myListTableView; 
संबंधित मुद्दे