在iPhone中的UITableViewController类中没有调用touchesBegan方法

Con*_*sed 18 iphone uitableview touchesbegan

如何touchesBegan: withEvent:在UITableViewController类中使用方法?

UITableViewController是UIViewController类的子类.那么为什么该方法在UITableViewController中不起作用?

Ste*_*arp 23

我遇到了类似的问题,并发现了一种不涉及子类化UITableView的不同方法.另一种方法是在UITableViewController的视图中添加手势识别器.

我将此代码放在UITableViewController的viewDidLoad中:

UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
[self.view addGestureRecognizer:tap];
Run Code Online (Sandbox Code Playgroud)

并实现了事件处理程序:

- (void)handleTap:(UITapGestureRecognizer *)recognizer
{
    // your code goes here...
}
Run Code Online (Sandbox Code Playgroud)

我知道这个解决方案不使用touchesBegan,但我发现它是解决同一问题的简单方法.


Or *_*bel 7

除了作为UIViewController方法之外,touchesBegan也是一种UIView方法.

要覆盖它,你需要子类UIView或UITableView而不是控制器.

  • 苹果文档称UITableViewController是一个UIVeeController,它是一个UIResponder.UIResponder已经触及了Began:withEvent (19认同)

小智 5

这是一个适合我的UITableView子类解决方案.创建一个UITableView的子类并覆盖hitTest:withEvent:如下所示:

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {

    static UIEvent *e = nil;

    if (e != nil && e == event) {
        e = nil;
        return [super hitTest:point withEvent:event];
    }

    e = event;

    if (event.type == UIEventTypeTouches) {
        NSSet *touches = [event touchesForView:self];
        UITouch *touch = [touches anyObject];
        if (touch.phase == UITouchPhaseBegan) {
            NSLog(@"Touches began");
        }
    }
    return [super hitTest:point withEvent:event];
}
Run Code Online (Sandbox Code Playgroud)