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

时间:2012-01-09 07:34:11

标签: iphone uitableview touchesbegan

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

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

5 个答案:

答案 0 :(得分:23)

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

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

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

并实现了事件处理程序:

- (void)handleTap:(UITapGestureRecognizer *)recognizer
{
    // your code goes here...
}

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

答案 1 :(得分:7)

除了作为UIViewController方法之外,

touchesBegan也是一个UIView方法。

要覆盖它,你需要继承UIView或UITableView而不是控制器。

答案 2 :(得分: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];
}

答案 3 :(得分:4)

touchesBegan是一个UIView和UITableViewCell方法,而不是UIViewController& UITableViewController方法。 所以你可以为UITableViewCell创建自定义类,它识别触摸事件并触摸委托它对我有用。

  //TableViewCell.h

#import <UIKit/UIKit.h>

@class Util;

@interface TableViewCell : UITableViewCell {

}
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier;

@end
   //TableViewCell.m
#import "TableViewCell.h"
@implementation TableViewCell

-(id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier      format:(NSString*)ec_format{

    if (self) {
        self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];

   }

   return self;
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
 {
//you receive touch here 
    NSLog(@"Category Touch %@",self.frame);


}

度过美好的一天

答案 4 :(得分:2)

IN SWIFT - 我在搜索Swift 2解决方案时遇到了这个问题。 @Steph Sharp发布的答案帮助我解决了Swift中的问题所以我虽然在这里发布了它。你走了:

class CalcOneTableViewController: UITableViewController {
      override func viewDidLoad() {
         super.viewDidLoad()
         let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "handleTap:")
         self.view.addGestureRecognizer(tap)
}

功能

func handleTap(recognizer: UITapGestureRecognizer) {
    // Do your thing.
}