objective c - UITableViewCell चेकमार्क का चयन पर परिवर्तन




objective-c iphone (6)

क्या मैं यह सोचकर सही हूं कि "ऑन" से "ऑफ" के लिए चेकमार्क को बदलने के लिए, मुझे CellAccessoryType को none बीच none बदलना चाहिए और didSelectRowAtIndexPath पर checkmark ?

क्योंकि मैंने ऐसा किया है, लेकिन मैंने देखा है कि आईफोन पर ऑटो लॉक सेटिंग्स पर चेकमार्क कोशिकाओं की तरह व्यवहार पूरी तरह से समान नहीं है।

या क्या कोई और तरीका है कि चेकमार्क को संभाला जाए?


  1. अपने व्यू कंट्रोलर में एक प्रॉपर्टी चुनें जिसे selectedRow कहा जाता है, जो एक पंक्ति के सूचकांक का प्रतिनिधित्व करता है जो तालिका अनुभाग में चेक किए गए आइटम का प्रतिनिधित्व करता है।

  2. आपके दृश्य में कंट्रोलर -tableView:cellForRowAtIndexPath: प्रतिनिधि विधि, cell के accessoryType -tableView:cellForRowAtIndexPath: को UITableViewCellAccessoryCheckmark सेट करें यदि सेल का indexPath.row selectedRow जाता है। अन्यथा, इसे UITableViewCellAccessoryNone सेट करें।

  3. आपके विचार में कंट्रोलर -tableView:didSelectRowAtIndexPath: प्रतिनिधि विधि, selectedRow -tableView:didSelectRowAtIndexPath: सेट करें। जो selectedRow है, जैसे: self.selectedRow = indexPath.row


Zyphrax ने एक महान समाधान सुझाया जो मेरे लिए बहुत अच्छा काम किया! और अगर आपको पिछली चयनित पंक्ति को खाली करने की आवश्यकता है, तो बस उपयोग करें:

[self.tableView reloadData]; 

में

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

एलेक्स जवाब ने मेरे लिए केवल रीलोड टेबल, .h जोड़ने के बाद काम किया

{
  int selectedCell;
}
@property(nonatomic,readwrite)int selectedCell;

में .m * सेलफ़ोररौटइंडेक्सपैथ *

if(indexPath.row == selectedCell)
    {
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
        cell.selected = YES;
    }
    else
    {
        cell.accessoryType = UITableViewCellAccessoryNone;
        cell.selected = NO;
    }

और कहीं भी किया ।HlightlightRowAtIndexPath या didSelectRowAtIndexPath

 self.selectedCell = indexPath.row;
    [self.tableView reloadData]; 

तेजी से:

var selectedCell:UITableViewCell?{
    willSet{
        selectedCell?.accessoryType = .None
        newValue?.accessoryType = .Checkmark
    }
}

फिर:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    selectedCell = self.tableView.cellForRowAtIndexPath(indexPath)
    self.mapView.selectAnnotation(self.mapView.annotations[indexPath.row], animated: true)
}

स्विफ्ट के लिए

  func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        tableView.cellForRow(at: indexPath)?.accessoryType = .checkmark
  }

  func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
        tableView.cellForRow(at: indexPath)?.accessoryType = .none
  }

यदि आप अपनी कस्टम इमेज को कोड के नीचे एक्सेसरी टाइप के रूप में उपयोग करना चाहते हैं

-(NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    UIImageView *imgCheckMark = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"select_icon.png"]];
    [imgCheckMark setFrame:CGRectMake(self.view.frame.size.width - 30, 25, 14, 18)];
    imgCheckMark.tag = 1000+indexPath.row;

    NSIndexPath *oldIndex = [self.tblSelectService indexPathForSelectedRow];
    [self.tblSelectService cellForRowAtIndexPath:oldIndex].accessoryView = UITableViewCellAccessoryNone;
    [self.tblSelectService cellForRowAtIndexPath:indexPath].accessoryView = imgCheckMark;
    return indexPath;
}




checkmark