2009-11-21 11 views
12

पर संपादन मोड पता लगाने के लिए अपने iPhone एप्लिकेशन के लिए, मैं एक संपादन योग्य (हटाने के लिए) तालिका दृश्य है। मैं यह पता लगाने में सक्षम होना चाहता हूं कि उपयोगकर्ता ने "संपादन" बटन पर क्लिक किया है। इस छवि को देखें: http://grab.by/It0कैसे iPhone UITableView

डॉक्स से, ऐसा लग रहा था जैसे अगर मैं कार्यान्वित:

- (void)tableView:(UITableView *)tableView willBeginEditingRowAtIndexPath:(NSIndexPath *)indexPath 

तो मैं यह पता लगा सकता है (हालांकि विधि के नाम से, मुझे लगता है कि नहीं होगा)। यह काम नहीं साबित हुआ।

इस का पता लगाने पर कोई भी विचार? कारण मैं चाहता हूँ मैं हटाने मोड में जब ऊपरी बाएँ हाथ के कोने में एक "सभी हटाएँ" बटन हुक करना चाहते हैं।

धन्यवाद

उत्तर

19

यह शायद काम नहीं कर रहा जैसा कि आप क्योंकि willBeginEditingRowAtIndexPath: से पहले संपादन शुरू होता है कहा जाता है की उम्मीद है।

आप जबकि एक अन्य विधि में आप editing संपत्ति की जरूरत जाँच करना चाहते हैं:

@property(nonatomic, getter=isEditing) BOOL editing 

आप जब 'संपादन' बटन दबाया जाता है आप setEditing विधि लागू करने की आवश्यकता कुछ करना चाहते हैं:

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

जो तुम UIViewController में मिल जाएगा। (ठीक है, यह सबसे संभावित स्थान है; अन्य हैं।)

+0

(शून्य) setEditing: (bool) संपादन एनिमेटेड: (bool) एनिमेटेड {[सुपर setEditing: संपादन एनिमेटेड: एनिमेटेड]। } संपादन बटन के लिए इसकी अपेक्षित कार्रवाई को बनाए रखें। –

3

यह विधि आपको बताती है कि कोई उपयोगकर्ता सेल संपादित कर रहा है, तालिका को संपादन मोड में नहीं डालता है। वहाँ एक तरीका है जब संपादन मोड दर्ज किया गया है कहा जाता है, प्रत्येक कोशिका पूछना है अगर यह संपादित किया जा सकता:

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath 

मैं अधिभावी setEditing:animated: समझ में आता है नहीं लगता है, जब से तुम UITableView अतिरिक्त काम है जो उपवर्ग करने के लिए होता है और एक वर्ग आप कोई अन्य कारण की जरूरत है, का उल्लेख नहीं है यह तथ्य यह है कि संपादन वापस नियंत्रक करने के लिए चालू किया गया था संवाद करने के लिए होगा।

एक अन्य विकल्प के लिए बस अपने आप को संपादित करें बटन जोड़ने के लिए है - यह एक UIBarButtonSystemItem में बनाया गया है, तो आप इसे जोड़ने और फिर इसे अपने स्वयं के विधि है जिसमें आप कुछ विशिष्ट कर फोन तो UITableView पर ही setEditing:animated: फोन हो सकता है।

संपादन के पीछे विचार यह है कि जब संपादन सक्षम होता है, तो प्रत्येक सेल को संपादन मोड पर जाने के लिए कहा जाता है, और यह पूछे जाने पर कि क्या कोई विशिष्ट संपादन नियंत्रण लागू किया जाना चाहिए। तो सिद्धांत रूप में कोशिकाओं की उपस्थिति को बदलने से परे संपादन मोड में प्रवेश का पता लगाने की आवश्यकता नहीं है। संपादन मोड दर्ज होने पर आप क्या करने की कोशिश कर रहे हैं?

+0

सेट एडिटिंग UITableViewController पर है, जिसे आपने शायद पहले ही उप-वर्गीकृत किया है, तालिकादृश्य पर नहीं। एक कारण के रूप में आप ऐसा करना चाहते हैं, मान लें कि उपयोगकर्ता पंक्तियों को फिर से व्यवस्थित कर सकता है, लेकिन आप इस सर्वर को वेब सर्वर पर तब तक नहीं करना चाहते हैं जब तक यह सब कुछ नहीं हो जाता है। – Nathan

13

जब एक टेबलव्यू कंट्रोलर को उप-वर्गीकृत करते हैं (अधिकतर लोग उस समय के अधिकांश तरीकों को ओवरराइड करना चाहते हैं क्योंकि आपको डेटा को केवल डेटा डालने के लिए ओवरराइड करना पड़ता है ...) आप बस सेट एडिटिंग को ओवरराइड कर सकते हैं: एनिमेटेड: विधि संपादन राज्य परिवर्तन पकड़ो।

- (void)setEditing:(BOOL)editing animated:(BOOL)animated { 
    NSLog(@"Editing %i", editing); 
    [super setEditing:editing animated:animated]; 
} 

सुपर वर्ग के साथ स्थिति परिवर्तन से गुजरता है, लेकिन आप बीच में कूद और परिवर्तन का पता लगाने, या यह परिवर्तन अगर तुम चाहते थे देता है कि ...

+1

[सुपर सेट संपादन: एनिमेटेड संपादन: एनिमेटेड]; संपादन बटन के लिए इसकी अपेक्षित कार्रवाई बरकरार रखने की आवश्यकता है। –

3

केंडल के जवाब काम करता है। मैंने इसे निम्नलिखित तरीके से किया।

// Override to support conditional editing of the table view. 
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { 
    // Return NO if you do not want the specified item to be editable. 
    NSLog(@"Can edit %d", tableView.editing); 
    if (tableView.editing == 1) { 
     [self.editButtonItem setTitle:EDIT_BUTTON_TITLE]; 
    }else { 
     [self.editButtonItem setTitle:DONE_BUTTON_TITLE]; 
    } 

    return YES; 
} 
3

setEditing: एनिमेटेड: उदाहरण (आईओएस 6.1 पर) मेरे लिए काम नहीं किया राज्य परिवर्तन होते हैं कि जब आप में प्रवेश और बाहर निकलने पुष्टि मोड को हटाना पता लगाने के लिए। ऐसा लगता है कि सेट संपादन: एनिमेटेड: केवल एक बार बुलाया जाता है, जब तालिका दृश्य संपादन मोड में जाता है, लेकिन कोशिकाओं के राज्य परिवर्तनों पर नहीं। कुछ डीबगर मज़ा के बाद, मैं सेल राज्य परिवर्तन का पता लगाने के लिए एक विधि पर पहुंचा।

मेरा उपयोग केस आपके से अलग है। जब मैं डिलीट बटन दिखा रहा हूं तो मैं लेबल को छिपाना चाहता था ताकि हटाएं बटन स्लाइड करते समय अन्य सेल सामग्री इसे ओवरलैप न करे। (मैं UITableViewCellStyleValue2 का उपयोग कर रहा हूं, जो बाएं और काले लेबल पर नीले लेबल के साथ है सही पर)

(अपने UITableViewCell उपवर्ग में)

- (void)willTransitionToState:(UITableViewCellStateMask)state { 
    [super willTransitionToState:state]; 
    if (state & UITableViewCellStateShowingDeleteConfirmationMask) { 
     // showing delete button 
     [self.textLabel setAlpha:0.0f]; // <-- I just wanted to hide the label 
    } 
} 

- (void)didTransitionToState:(UITableViewCellStateMask)state { 
    if (!(state & UITableViewCellStateShowingDeleteConfirmationMask)) { 
     // not showing delete button 
     [self.textLabel setAlpha:1.0f]; // <-- show the label 
    } 
}