2009-07-01 10 views
24

मेरी तालिका दृश्य नियंत्रक मेंiPhone, तालिका दृश्य में संपादित करें/किया बटन क्लिक के लिए हुक

self.navigationItem.leftBarButtonItem = self.editButtonItem; 

जो ऊपरी बाएं कोने में एक नियमित रूप से संपादित करें/किया बटन उत्पादन होता है। इसलिए, जब उपयोगकर्ता "संपादन" पर क्लिक करता है, तो बटन कैप्शन "पूर्ण हो गया" में बदल जाता है और तालिका प्रविष्टियों को हटाया जा सकता है या फिर से किया जा सकता है। उपयोगकर्ता वास्तव में "पूर्ण" क्लिक करने के बाद अधिसूचित होना चाहता हूं। क्या इसके लिए कोई हुक है?

पृष्ठभूमि: मैं प्रविष्टियों के क्रम को जारी रखना चाहता हूं यानी अगली बार जब उपयोगकर्ता इस दृश्य को खींचता है तो मैं कम से कम हाल ही में उपयोग किए गए क्रम में प्रविष्टियां प्रस्तुत करना चाहता हूं।

उत्तर

43
जो लोग अब भी यह प्रश्न में interesed हैं के लिए

(या का जवाब: पी)

UITableView API

ने खुलासा किया कि - (void)setEditing:(BOOL)editing animated:(BOOL)animate विधि है, इस विधि को हर बार इस संपादन/किए गए बटन दबाए जाने पर बुलाया जाता है। आपको केवल (BOOL)editing पैरामीटर द्वारा जांचना होगा जिसका उपयोग किया गया था। अंतिम लेकिन कम से कम आपको मूल रूप से संपादन/किए गए बटन से उचित विधि को कॉल करना होगा।

बस अपने UITableView वर्ग

- (void)setEditing:(BOOL)editing animated:(BOOL)animate 
{ 
    [super setEditing:editing animated:animate]; 
    if(editing) 
    { 
     NSLog(@"editMode on"); 
    } 
    else 
    { 
     NSLog(@"Done leave editmode"); 
    } 
} 
+0

ध्यान रखें कि सेट एडिटिंग: एनिमेटेड() को भी प्रोग्राम किया जाता है यदि कुछ भी प्रोग्रामेटिक रूप से दृश्य को रखता है संपादन मोड। मैंने एक अतिरिक्त विधि जो केवल [सुपर सेट एडिटिंग] को कॉल किया है जिसे मैं संपादन मोड को बाहरी रूप से सेट करने के लिए उपयोग कर सकता हूं। – Symmetric

+0

नोट: यदि आप 'UIViewCiewroller' के माध्यम से' UITableView' ** प्रतिनिधि ** के रूप में ऐसा कर रहे हैं, तो ** ** तालिका के ** संपादन स्थिति को सेट करने के लिए 'UITableView' को बताना सुनिश्चित करें '[self.tableView setEditing : एनिमेटेड संपादन: एनिमेटेड] '। – cloudrave

2

यह सूचित किया जाता है मानक तरीका करने के लिए मिलता है, जब एक बार बटन धक्का दिया गया है:

self.editButtonItem.target = self; 
self.editButtonItem.action = @selector(buttonPushed:); 

... 

- (void) buttonPushed:(id)sender 
{ 
// do stuff here 
} 
+0

ठीक है, मुझे पता है। मुद्दा यह है कि मैं जो बटन पहले से करता हूं उससे हस्तक्षेप नहीं करना चाहता (सूची प्रविष्टियों को संशोधित करें, इसके कैप्शन को टॉगल करें, इत्यादि)। मैं बस जानना चाहता हूं कि इसे "पूर्ण" स्थिति में कब क्लिक किया जाता है। –

+1

UIBarButtonItems UIControl से प्राप्त नहीं होते हैं, इसलिए आप इसे केवल एक और लक्ष्य नहीं जोड़ सकते हैं। आप हमेशा कार्रवाई को पकड़ सकते हैं और राज्य को स्वयं बनाए रख सकते हैं। यह इतना मुश्किल नही है। अन्यथा, बटन दबाए गए कॉल (ऊपर) प्राप्त करें, फिर 'अनदेखा' ध्वज सेट करें और बटन पर एक बार की घटना को संश्लेषित करें ताकि इसे अपनी बात करने दें। यहां स्पर्श कार्यक्रमों को संश्लेषित करने के बारे में विवरण: http://cocoawithlove.com/2008/10/synthesizing-touch-event-on-iphone.html – Ramin

0

यह कार्रवाई बदलना संभव है के लिए इस विधि जोड़ें। संपादन बटन क्लिक करने के बाद यह हटाएं बटन दिखाता है, इसके बजाय बटन को अस्वीकार/सत्यापित/संशोधित करना संभव है। और इसी कार्रवाई को बदलने के बजाय हटाएं विकल्प का

धन्यवाद Mindus

3

जो लोग UITableView ओवरराइड करने के लिए नहीं करना चाहते हैं के लिए (उदाहरण के लिए यदि आप UITableViewController का उपयोग कर रहे हैं), यहाँ एक सरल और साफ समाधान है कि मैं का उपयोग है। इसमें मूल रूप से संपादन संपादित करने के लिए अपना स्वयं का संपादन बटन आइटम बनाना और तालिका दृश्य editing ध्वज का उपयोग करना शामिल है। केक पर टुकड़े करने के लिए, यह नई वस्तुओं को जोड़ने के लिए तालिका खाली होने पर "+" बटन ("संपादित करें" के बजाय) दिखाता है।

- (void) updateEditButtonVisibility 
{ 
    // tableItems represents the data structure that s 
    if ([tableItems count] > 0) 
    { 
     UIBarButtonSystemItem editButtonType = self.tableView.editing ? UIBarButtonSystemItemDone : UIBarButtonSystemItemEdit; 
     UIBarButtonItem *editButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:editButtonType 
                         target:self 
                         action:@selector(editButtonTouched)]; 

     self.navigationItem.rightBarButtonItem = editButtonItem; 
     [editButtonItem release]; 
    } 
    else 
    { 
     UIBarButtonItem *addButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd 
                         target:self 
                         action:@selector(addButtonTouched)]; 
     self.navigationItem.rightBarButtonItem = addButtonItem; 
     [addButtonItem release]; 
    } 
} 

- (void) editButtonTouched 
{ 
    // edit/done button has been touched 

    [self.tableView setEditing:!self.tableView.editing animated:YES]; 
    [self updateEditButtonVisibility]; 
} 

- (void) addButtonTouched 
{ 
    // logic to allow user to add new items goes here 
} 

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 

    [self updateEditButtonVisibility]; 
} 
संबंधित मुद्दे