2010-09-29 25 views
7

Tôi có một lớp cha (A) là UIViewController. Hơn tôi tạo lớp B là lớp con của lớp A. Điều gì xảy ra là tôi không thể bắt các sự kiện liên lạc trong lớp B với các phương thức như touchesBegan. Nhưng nếu tôi thực hiện các phương thức này trong lớp A ... chúng sẽ được gọi.Lớp con của UIViewController không bắt sự kiện chạm

@interface A:UIViewController 
..... 

@interface B:A 

Trả lời

3

Bạn cần phải thực hiện các phương pháp đó trong UIView lớp con của bạn, không phải trong UIViewController lớp con.

+0

Hmmm ... tôi nghĩ tôi không hiểu. Tôi đã thêm một số thông tin khác trong câu hỏi của mình. – troner

+0

Mọi thứ hoạt động ngay bây giờ. Đó là sai lầm của tôi. Tôi đã có một số loại lỗi. Các công việc subclassing của tôi :) Cảm ơn bạn đã trả lời! – troner

4

Bạn cần phải phân lớp UIView để triển khai phương thức touchesBegan.

@interface YourCustomView : UIView 

@implementation YourCustomView 

// Override this function to get the touch 
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    NSLog(@"TOUCH!"); 
} 

Và bây giờ thiết lập quan điểm của VC của bạn như là một "YourCustomView"

@interface YourViewController : UIViewController 
{ 
    YourCustomView* view 
} 
+0

Có, ok, nhưng điều này thay đổi kiến ​​trúc. Có thực sự không có gì tôi có thể làm? Có thể liên kết hoặc kích hoạt một cái gì đó. – troner

+0

Tôi đã gặp vấn đề tương tự gần đây và nó chỉ thay đổi rất ít trong kiến ​​trúc. – MathieuF

+1

Mọi thứ hoạt động ngay bây giờ. Đó là sai lầm của tôi. Tôi đã có một số loại lỗi. Các công việc subclassing của tôi :) Cảm ơn bạn đã trả lời! – troner

7

Để sử dụng một UIViewController, phải làm sự kiện như:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch; 
    CGPoint pos; 

    for(touch in touches) 
    { 
     //pos = [ touch locationInView:self ]; // Only work on UIView 
     pos = [touch locationInView:self.view ];  // Work on UIViewController 

     //NSLog(@"Touch: %f, %f",pos.x,pos.y); 

     // Send X, Y, tapcount 
     _faceOff->toucheBegan(pos.x, pos.y, [ [ touches anyObject ] tapCount ]); 
    } 
} 

Hy vọng nó giúp.

Các vấn đề liên quan