2016-03-31 3 views
-2

Мне нужен CGPoint от крана на моем UITableViewCell. Для этого я хочу использовать метод touchesBegan:withEvent: в моем подклассе UITableViewCell.CGPoint отвода на UITableViewCell с помощью touchBegan

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    [super touchesBegan:touches withEvent:event]; 
    UITouch *touch = [[event allTouches] anyObject]; 
    CGPoint location = [touch locationInView:touch.view]; 
    NSLog(@"%@", NSStringFromCGPoint(location)); 
} 

Как я могу передать, что из моего UITableViewCell подкласса моих текущего viewController, так что я могу сделать действие в зависимости от того, где в камере они похлопали?

** Я не хочу использовать распознаватель жестов в ячейке, так как он не позволит вызывать метод didSelectRowAtIndexPath:.

+0

Что вопрос? Можете ли вы не просто добавить делегат или блок действий в ячейку, которая обращается к viewController –

+1

«Я не хочу использовать распознаватель жестов в ячейке, так как он не позволит вызывать метод didSelectRowAtIndexPath:« Вы _already_ отключение сенсорного ответа на табличном представлении. Вещи не могут ухудшиться, чем код, который у вас уже есть ... – matt

+0

Если вы позвоните в супер в ваших прикосновениях, начните реализацию, тогда все должно работать как ожидалось –

ответ

1

Либо делегирование, либо обратный вызов блока сделают это. Ниже приведен пример использования блоков

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath; 
{ 
    CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath]; 

    __weak __typeof(self) weakSelf = self; 
    cell.touchedAtPoint = ^(UITableViewCell *cell, CGPoint point) { 
    [weakSelf doSomethingWithPoint:point); 
    }; 

    return cell; 
} 

В клетке

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event; 
{ 
    [super touchesBegan:touches withEvent:event]; 

    UITouch *touch = [[event allTouches] anyObject]; 
    CGPoint location = [touch locationInView:touch.view]; 

    void (^touchedAtPoint)(UITableViewCell *, CGPoint) = self.touchedAtPoint; 
    if (touchedAtPoint) { 
    touchedAtPoint(self, location); 
    } 
} 

- (void)prepareForReuse; 
{ 
    [super prepareForReuse]; 

    self.touchedAtPoint = nil; 
} 

Декларация Ивар

@property (nonatomic, copy) void (^touchedAtPoint)(UITableViewCell *cell, CGPoint point); 
+0

Какой объект «коснулсяАтпойнт»? Мне нужно сделать это как собственность. –

+0

Я добавлю к ответу –

+0

Ошибка 'Block pointer to non-function type is invalid' для строки' void (^ touchhedAtPoint) = self.touchedAtPoint; '. –

Смежные вопросы