Если я понимаю, что вы делаете - тогда может пригодиться приведенная ниже процедура.Он получает координаты касания, а затем проверяет его по каждому прямоугольнику в массиве.Если CPPoint находится внутри прямоугольника, то у вас есть свой индекс и на основании этого вы можете делать то, что вам нужно.
В зависимости от того, как вы определяете свой массив протоколов, вам может потребоваться нормализовать сенсорный CGPoint.
В любом случае - надеюсь, это поможет.
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
CGPoint point = [touch locationInView:self.view];
// See if the point touched is within these rectangular bounds
if (CGRectContainsPoint(self.gridRect, point))
{
CGRect rect;
int cnt = self.cellRectArray.count;
for (int i = 0; i < cnt; i++) {
rect = [[self.cellRectArray objectAtIndex:i] cellRect];
rect = CGRectOffset(rect, self.gridOriginX, self.gridOriginY);
rect = CGRectInset(rect, 10, 10);
if (CGRectContainsPoint(rect, point)) {
// do something
break;
}
}
}
}