2012-04-23 7 views
6

UIControl - changing assigned selectors: addTarget & removeTargetमैं removeTarget चाहिए इससे पहले कि मैं पहले <strong>बदलते दूसरे करने के लिए</strong>

स्टेट्स कि आप लक्ष्य को निकाल देना चाहिए addTarget। हालांकि अगर मैं सेलफोररोएट इंडेक्सपैथ में लक्ष्य निर्धारित कर रहा हूं तो क्या होगा? क्या इसे फिर से जोड़ने से पहले लक्ष्य को हटा देना चाहिए, भले ही यह नहीं बदला जा रहा हो? अगर मैं इसे हटा नहीं देता हूं या इसे सिर्फ ओवरराइट कर दूंगा तो क्या यह विधि दो बार कॉल करेगा?

[cell.cellSwitch removeTarget:self action:@selector(notifySwitchChanged:) forControlEvents:UIControlEventValueChanged]; 
[cell.cellSwitch addTarget:self action:@selector(notifySwitchChanged:) forControlEvents:UIControlEventValueChanged]; 

उत्तर

0

मेरे अनुभव के बाद, इसे केवल एक बार बुलाया जाएगा।

लेकिन आईएमओ, removeTarget का उपयोग करना बेहतर है क्योंकि हमेशा भविष्य में कोड बदला जा सकता है। और किसी दिन, आपको कई लक्ष्यों और चयनकर्ताओं को जोड़ने की आवश्यकता हो सकती है।

सुरक्षित, स्केलेबल और रखरखाव में एक कोड बनें।

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell *cell = // code with reuse identifier ... 
    if(cell == nil) 
    { 
     // making view for cell .... 
    } 

    // myAction will be called ONLY ONCE after many times of scrolling 
    [cell.myButton addTarget:self action:@selector(myAction:) forControlEvents:UIControlEventTouchUpInside]; 

    return cell; 
} 
0
इसके बजाय जोड़ने/लक्ष्यों को दूर करने के

, मैंने पाया है कि अगर मैं पहले से ही UITableViewCell उपवर्गीकरण कर रहा हूँ, मैं एक नया प्रतिनिधि जोड़ सकते हैं और दृश्य नियंत्रक के लिए प्रतिनिधि निर्धारित करेंगे। इस तरह, प्रतिनिधि पर बुलाए गए किसी भी तरीके पूरे सेल में जा सकते हैं और इसलिए मैं UITableView की indexPathForCell विधि पर कॉल करके सेल का इंडेक्स पथ प्राप्त कर सकता हूं।

संबंधित मुद्दे