Как добавить UIControlEvents на UITableViewCell

Я хочу знать, как я могу добавить UIControlEvent к UITableViewCell? Я не могу использовать метод addTarget:action:forControlEvents на UITableViewCell, Я не могу использовать didSelectCellAtIndexPath: потому что мне нужно знать для UIControlEventTouchDown а также UIControlEventTouchUpInside, Как мне этого добиться?

Спасибо!

2 ответа

Решение

РЕДАКТИРОВАТЬ: Другой вариант состоит в том, чтобы выставить UIButton собственность на вашу камеру публично, и в cellForRowAtIndexPath: вызов addTarget:action:forControlEvent: на кнопке ячейки, передавая себя и метод на вашем контроллере представления, который вы хотите вызвать на ощупь. Это исключает необходимость использования протокола делегата. Единственный улов в том, что перед тем, как установить целевое действие на кнопку ячейки, обязательно вызовите:

[cell.button removeTarget:nil 
               action:NULL 
     forControlEvents:UIControlEventAllEvents]; 

Поскольку ячейка (и ее кнопка) используется повторно, вам необходимо вызвать ее, чтобы убедиться, что вы не складываете целевые действия на кнопке.

Я думаю, что самое чистое решение - определить UIGestureRecognizer и добавить его в UITableViewCell,

MDGestureRec.h

#import <UIKit/UIKit.h>
#import <UIKit/UIGestureRecognizerSubclass.h>

@interface MDGestureRec : UIGestureRecognizer

- (void)reset;
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event;

@end

// ------

MDGestureRec.m

#import "MDGestureRec.h"

@implementation MDGestureRec

- (void)reset { }
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    NSLog(@"touches %@", [touches description]);
    NSLog(@"touchesBegan %@", [event description]);
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { }
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { }
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event { }

@end

// ------

    MDGestureRec *g = [[MDGestureRec alloc] init];

    [cell addGestureRecognizer:g];
Другие вопросы по тегам