2012-01-09 11 views
15

Tôi có thể sử dụng phương thức touchesBegan: withEvent: trong lớp UITableViewController như thế nào?chạm Phương thức thuần không được gọi trong lớp UITableViewController trong iPhone

UITableViewController là lớp con của lớp UIViewController. Vậy tại sao phương thức này không hoạt động trong UITableViewController?

+0

Trong trường hợp bạn muốn sử dụng phương pháp này trong tableviewcontroller? –

+0

đã được trả lời tại http://stackoverflow.com/questions/5382683/why-does-my-uitableview-not-respond-to-touchesbegan –

+0

phân lớp UITableView này và thực hiện các thao tác chạm vàoBán ở đó. Nó sẽ làm việc không đau đớn. – samfisher

Trả lời

6

chạm Phương thức cũng là phương pháp UIView bên cạnh phương pháp UIViewController.

để ghi đè nó, bạn cần phải phân lớp UIView hoặc UITableView chứ không phải bộ điều khiển.

+18

Tài liệu táo nói UITableViewController là một UIViewController là một UIResponder. UIResponder có touchesBegan: withEvent – finneycanhelp

4

chạmChức năng là phương pháp UIView và UITableViewCell thay vì phương thức UIViewController & UITableViewController. để bạn có thể tạo lớp tùy chỉnh cho UITableViewCell nó nhận ra sự kiện cảm ứng và đại biểu liên lạc mà nó đang làm việc cho tôi.

//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); 


} 

có một ngày tốt

+0

điều này sẽ không làm việc như tableview sẽ hấp thụ các liên lạc và nó sẽ không bao giờ chạm tới touchesBegan – samfisher

+0

trước khi bình luận và bình chọn xin vui lòng kiểm tra mã nếu nó đang làm việc hay không, TableViewCell là lớp phụ của UIView vì vậy nếu UIView phản ứng cho các liên lạc sau đó nó nên được cho TableViewCell Justify !!! –

+0

Mã này sẽ không bao giờ hoạt động như được giải thích bởi các bình luận từ @balakrishnan. Cả hai ý kiến ​​của họ là hoàn toàn đúng. Tôi thậm chí đã thử mã cho sự tò mò và có nó không hoạt động –

23

Tôi đã có một vấn đề tương tự, và tìm thấy một cách tiếp cận khác nhau mà không liên quan đến subclassing UITableView. Một cách khác để làm điều này là thêm một trình nhận dạng cử chỉ vào khung nhìn của UITableViewController.

tôi đặt mã này trong viewDidLoad của UITableViewController:

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

Và thực hiện các xử lý sự kiện:

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

tôi biết giải pháp này doesnt sử dụng touchesBegan, nhưng tôi thấy đó là một giải pháp đơn giản để vấn đề giống nhau.

+0

Điều này không chỉ kích hoạt khi bạn nhấc ngón tay ra khỏi màn hình? –

4

Đây là giải pháp phân lớp UITableView hoạt động cho tôi. Tạo một lớp con của UITableView và ghi đè hitTest: withEvent: như sau:

- (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]; 
} 
2

SWIFT - Tôi đã xem qua câu hỏi này trong khi tìm kiếm giải pháp Swift 2. Câu trả lời được đăng bởi @Steph Sharp đã giúp tôi giải quyết vấn đề trong Swift vì vậy tôi cho rằng tôi sẽ đăng nó lên đây. Ở đây bạn đi:

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

Chức năng

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