मैं प्रोग्रामेटिक रूप से एक UITableView
पंक्ति का चयन कैसे करूं ताकि
- (void)tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath
निष्पादित हो जाता है? selectRowAtIndexPath
केवल पंक्ति को हाइलाइट करेगा।
मैं प्रोग्रामेटिक रूप से एक UITableView
पंक्ति का चयन कैसे करूं ताकि
- (void)tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath
निष्पादित हो जाता है? selectRowAtIndexPath
केवल पंक्ति को हाइलाइट करेगा।
जवाबों:
इस विधि कॉलिंग प्रतिनिधि एक प्राप्त करने के लिए कारण नहीं है
tableView:willSelectRowAtIndexPath:
याtableView:didSelectRowAtIndexPath:
संदेश, न ही यह भेजताUITableViewSelectionDidChangeNotification
पर्यवेक्षकों को सूचनाएं।
मैं क्या करूंगा:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[self doSomethingWithRowAtIndexPath:indexPath];
}
और फिर, जहाँ से आप selectRowAtIndexPath को कॉल करना चाहते थे, आप इसके बजाय doSomethingWithRowAtIndexPath पर कॉल करें। यदि आप UI फीडबैक चाहते हैं, तो इसके अलावा, आप इसके अलावा selectRowAtIndexPath भी कॉल कर सकते हैं।
जैनुस ने बताया:
इसे कॉल करना (-selectRowAtIndexPath: animated: ScrollPosition :) विधि प्रतिनिधि को तालिका दृश्य प्राप्त करने का कारण नहीं बनता है: willSelectRowAtIndexPath: या tableView: didSlectRowAtIndexPath: संदेश, और न ही यह UITableViewSelectionDriveCid पर भेजेगा।
तो आपको बस delegate
खुद ही विधि को कॉल करना होगा ।
उदाहरण के लिए:
स्विफ्ट 3 संस्करण:
let indexPath = IndexPath(row: 0, section: 0);
self.tableView.selectRow(at: indexPath, animated: false, scrollPosition: UITableViewScrollPosition.none)
self.tableView(self.tableView, didSelectRowAt: indexPath)
उद्देश्य संस्करण:
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
[self.tableView selectRowAtIndexPath:indexPath
animated:YES
scrollPosition:UITableViewScrollPositionNone];
[self tableView:self.tableView didSelectRowAtIndexPath:indexPath];
स्विफ्ट 2.3 संस्करण:
let indexPath = NSIndexPath(forRow: 0, inSection: 0);
self.tableView.selectRowAtIndexPath(indexPath, animated: false, scrollPosition: UITableViewScrollPosition.None)
self.tableView(self.tableView, didSelectRowAtIndexPath: indexPath)
UITableView का चयन RRAAIIndexPath: एनिमेटेड: स्क्रॉलपोजिशन: ट्रिक करना चाहिए।
सिर्फ UITableViewScrollPositionNone
स्क्रॉलपोस्ट के लिए पास करें और उपयोगकर्ता को कोई भी आंदोलन दिखाई नहीं देगा।
आपको मैन्युअल रूप से कार्रवाई चलाने में सक्षम होना चाहिए:
[theTableView.delegate tableView:theTableView didSelectRowAtIndexPath:indexPath]
आपके बाद selectRowAtIndexPath:animated:scrollPosition:
इतना हाइलाइट होने के साथ-साथ कोई संबद्ध तर्क भी।
यदि आप कुछ पंक्ति का चयन करना चाहते हैं तो इससे आपको मदद मिलेगी
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
[someTableView selectRowAtIndexPath:indexPath
animated:NO
scrollPosition:UITableViewScrollPositionNone];
यह पंक्ति को हाइलाइट भी करेगा। फिर प्रतिनिधि
[someTableView.delegate someTableView didSelectRowAtIndexPath:indexPath];
स्विफ्ट 3/4/5 समाधान
पंक्ति का चयन करें
let indexPath = IndexPath(row: 0, section: 0)
tblView.selectRow(at: indexPath, animated: true, scrollPosition: .bottom)
myTableView.delegate?.tableView!(myTableView, didSelectRowAt: indexPath)
DeSelect Row
let deselectIndexPath = IndexPath(row: 7, section: 0)
tblView.deselectRow(at: deselectIndexPath, animated: true)
tblView.delegate?.tableView!(tblView, didDeselectRowAt: indexPath)
IPad और iPhone प्लेटफार्मों के लिए दो अलग-अलग तरीके हैं, इसलिए आपको दोनों को लागू करने की आवश्यकता है:
segue।
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
[self.tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];
// Selection handler (for horizontal iPad)
[self tableView:self.tableView didSelectRowAtIndexPath:indexPath];
// Segue (for iPhone and vertical iPad)
[self performSegueWithIdentifier:"showDetail" sender:self];
एक तालिका पंक्ति का चयन करने के लिए इस श्रेणी का उपयोग करें और एक देरी के बाद दिए गए सेगमेंट को निष्पादित करें।
इसे अपने viewDidAppear
तरीके से कॉल करें :
[tableViewController delayedSelection:withSegueIdentifier:]
@implementation UITableViewController (TLUtils)
-(void)delayedSelection:(NSIndexPath *)idxPath withSegueIdentifier:(NSString *)segueID {
if (!idxPath) idxPath = [NSIndexPath indexPathForRow:0 inSection:0];
[self performSelector:@selector(selectIndexPath:) withObject:@{@"NSIndexPath": idxPath, @"UIStoryboardSegue": segueID } afterDelay:0];
}
-(void)selectIndexPath:(NSDictionary *)args {
NSIndexPath *idxPath = args[@"NSIndexPath"];
[self.tableView selectRowAtIndexPath:idxPath animated:NO scrollPosition:UITableViewScrollPositionMiddle];
if ([self.tableView.delegate respondsToSelector:@selector(tableView:didSelectRowAtIndexPath:)])
[self.tableView.delegate tableView:self.tableView didSelectRowAtIndexPath:idxPath];
[self performSegueWithIdentifier:args[@"UIStoryboardSegue"] sender:self];
}
@end