首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >未在iPhone的UITableViewController类中调用touchesBegan方法

未在iPhone的UITableViewController类中调用touchesBegan方法
EN

Stack Overflow用户
提问于 2012-01-09 15:34:11
回答 5查看 26.3K关注 0票数 20

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

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

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-01-09 18:06:07

touchesBegan除了是一种UIView方法之外,还是一种UIViewController方法。

要覆盖它,您需要子类化UIView或UITableView,而不是控制器。

票数 8
EN

Stack Overflow用户

发布于 2013-02-20 07:47:34

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

我把这段代码放在UITableViewController的viewDidLoad中:

代码语言:javascript
复制
UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
[self.view addGestureRecognizer:tap];

并实现了事件处理程序:

代码语言:javascript
复制
- (void)handleTap:(UITapGestureRecognizer *)recognizer
{
    // your code goes here...
}

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

票数 23
EN

Stack Overflow用户

发布于 2013-11-15 22:51:29

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

代码语言:javascript
复制
- (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];
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8785184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档