प्रत्येक व्यक्तिगत सेल में इशारा पहचानकर्ताओं को जोड़ने के बजाय, आप तालिका दृश्य में एक जोड़ सकते हैं और यह निर्धारित कर सकते हैं कि उपयोगकर्ताओं के बिंदु से कौन सा सेल चुना गया था, और फिर यह निर्धारित करें कि उपयोगकर्ता ने छवि या सेल को स्पर्श किया है या नहीं।
पहले सुनिश्चित करें कि आपका नियंत्रक UIGestureRecognizerDelegate प्रोटोकॉल को गोद ले।
@interface MyTableViewController() <UIGestureRecognizerDelegate>
@end
फिर UIGestureRecognizer
UITableView
जब दृश्य लोड करने के लिए जोड़ें।
- (void)viewDidLoad
{
[super viewDidLoad];
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
singleTap.delegate = self;
singleTap.numberOfTapsRequired = 1;
singleTap.numberOfTouchesRequired = 1;
[self.tableView addGestureRecognizer:singleTap];
}
यह प्रतिनिधि विधि निर्धारित करती है कि handleTap:
विधि निष्पादित की जानी चाहिए। यदि उपयोगकर्ताओं को स्पर्श करने से indexPath
मिल सकता है, तो यह YES
देता है अन्यथा यह NO
देता है।
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
UITableView *tableView = (UITableView *)gestureRecognizer.view;
CGPoint p = [gestureRecognizer locationInView:gestureRecognizer.view];
if ([tableView indexPathForRowAtPoint:p]) {
return YES;
}
return NO;
}
एक बार जब हम उपयोगकर्ता एक सेल में क्लिक किया है, तो यह निर्धारित किया है, handleTap: विधि कहा जाता है, जो तब का फैसला करता है उपयोगकर्ता छवि, या सेल के किसी अन्य भाग को छुआ है।
- (void)handleTap:(UITapGestureRecognizer *)tap
{
if (UIGestureRecognizerStateEnded == tap.state) {
UITableView *tableView = (UITableView *)tap.view;
CGPoint p = [tap locationInView:tap.view];
NSIndexPath* indexPath = [tableView indexPathForRowAtPoint:p];
[tableView deselectRowAtIndexPath:indexPath animated:NO];
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
CGPoint pointInCell = [tap locationInView:cell];
if (CGRectContainsPoint(cell.imageView.frame, pointInCell)) {
// user tapped image
} else {
// user tapped cell
}
}
}
उन है कि पता नहीं है के लिए क्या देख रहे हैं। 'ViewDidLoad' में सभी' UITapGestureRecognizer 'सेटअप को Xcode UI लेआउट (उर्फ आईबी) में भी किया जा सकता है। आप 'हैंडलटैप:' से 'IBAction' के रिटर्न प्रकार को बदलना चाहेंगे। – ThomasW