2010-09-22 24 views
72

मैं UISwitch को UITableView सेल पर कैसे एम्बेड कर सकता हूं? सेटिंग्स मेनू में उदाहरण देखा जा सकता है।UISwitch एक UITableView सेल

मेरे वर्तमान समाधान:

UISwitch *mySwitch = [[[UISwitch alloc] init] autorelease]; 
cell.accessoryView = mySwitch; 
+3

वर्तमान तरीके से आप क्या कर रहे हैं? – MobileMon

उत्तर

183

accessoryView के रूप में यह निर्धारित करना आमतौर पर जाने के लिए रास्ता है। आप इसे tableView:cellForRowAtIndexPath: में सेट अप कर सकते हैं आप स्विच फ़्लिप होने पर कुछ करने के लिए लक्ष्य/क्रिया का उपयोग करना चाह सकते हैं। इस तरह:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    switch([indexPath row]) { 
     case MY_SWITCH_CELL: { 
      UITableViewCell *aCell = [tableView dequeueReusableCellWithIdentifier:@"SwitchCell"]; 
      if(aCell == nil) { 
       aCell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:@"SwitchCell"] autorelease]; 
       aCell.textLabel.text = @"I Have A Switch"; 
       aCell.selectionStyle = UITableViewCellSelectionStyleNone; 
       UISwitch *switchView = [[UISwitch alloc] initWithFrame:CGRectZero]; 
       aCell.accessoryView = switchView; 
       [switchView setOn:NO animated:NO]; 
       [switchView addTarget:self action:@selector(switchChanged:) forControlEvents:UIControlEventValueChanged]; 
       [switchView release]; 
      } 
      return aCell; 
     } 
     break; 
    } 
    return nil; 
} 

- (void)switchChanged:(id)sender { 
    UISwitch *switchControl = sender; 
    NSLog(@"The switch is %@", switchControl.on ? @"ON" : @"OFF"); 
} 
+1

MY_SWITCH_CELL के बजाय मुझे लगता है कि संबंधित सेल नंबर होना चाहिए। समाधान के चारों ओर अच्छा लगा! – testing

+2

aCell.accessoryView = switchView के साथ अच्छा बिंदु; – konradowy

+0

ब्रैकेट नोटेशन के साथ आप 'aCell.accessoryView = switchView;' कैसे लिखते हैं? – Jesse

10

आप एक UISwitch या सेल के accessoryView के लिए किसी भी अन्य नियंत्रण जोड़ सकते हैं। इस तरह यह सेल के दाईं ओर दिखाई देगा जो शायद आप चाहते हैं।

2

आप इंटरफेसबिल्डर में सेल तैयार कर सकते हैं, इसे अपने व्यू कंट्रोलर के आईबीओटलेट से लिंक कर सकते हैं और टेबलव्यू उचित पंक्ति के लिए पूछने पर इसे वापस कर सकते हैं।

इसके बजाय, आप सेल के लिए एक अलग xib (फिर से आईबी के साथ) बना सकते हैं और इसे सेल निर्माण पर UINib का उपयोग करके लोड कर सकते हैं।

अंत में, आप प्रोग्राम को प्रोग्रामेटिक रूप से स्विच कर सकते हैं और इसे अपने सेल कंटेंटव्यू या एक्सेसरीव्यू में जोड़ सकते हैं।

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

+0

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

8
if (indexPath.row == 0) {//If you want UISwitch on particular row 
    UISwitch *theSwitch = [[UISwitch alloc] initWithFrame:CGRectZero]; 
    [cell addSubview:theSwitch]; 
    cell.accessoryView = theSwitch; 
} 
+0

आप 'initWithFrame' का उपयोग क्यों करते हैं? आप 'addSubview' का उपयोग क्यों करते हैं? 'स्विच' को एक चर नाम के रूप में उपयोग नहीं किया जा सकता है। – testing

+0

स्विच नाम के लिए खेद है। मेरे पास कुछ कोड था .. मैंने बस इसमें परिवर्तनीय नाम बदल दिया। – kthorat

+0

यह मेरे लिए काम किया। कम कोड के साथ प्रभावी समाधान। –

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