Как добавить 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];