2012-12-13 25 views
7

Tôi đã có một dự án chứa rất nhiều UIButton, sử dụng xcode 4.5 và bảng phân cảnh và ARC. sau khi thử nghiệm trong ios6, mọi thứ diễn ra tốt đẹp. Nhưng trong ios5, UIButton chạm vào bên trong sự kiện không hoạt động, hành động không được gọi. Tôi đã cố gắng sử dụng chạm xuống và nó hoạt động. Tuy nhiên, tôi có rất nhiều UIButton, tôi không thể thay đổi từng cái một. những gì nhiều hơn, sự kiện chạm xuống không cung cấp cho một kinh nghiệm tốt.UIButton chạm vào bên trong sự kiện không hoạt động trong ios5 trong khi nó ok trong ios6

tôi đã sử dụng mã dưới đây trong nhiều bộ điều khiển quan điểm của tôi: trong viewDidLoad:

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self 
                     action:@selector(dismissKeyboard)]; 

[self.view addGestureRecognizer:tap]; 

-(void)dismissKeyboard { 
     [aTextField resignFirstResponder]; 
} 

này có thể là lý do. Tôi sẽ kiểm tra nó sau. Nhưng nó hoạt động trong ios6. Bạn có biết điều gì sai? Cảm ơn rất nhiều!

Trả lời

16

Tôi đã có cùng một vấn đề với bạn. Đó là do sự kiện cảm ứng trong iOS5 bị chặn khi gestureRecognizer bạn đăng ký chụp sự kiện.

Có hai giải pháp.

Một:

1) Thêm chế độ xem mới trong chế độ xem của bạn. Nó sẽ có cùng cấp với các nút. Mức độ ưu tiên của các nút phải cao hơn chế độ xem mới.

2) thay đổi cuộc gọi của 'addGestureRecognizer' sang chế độ xem mới.

[self.newView addGestureRecognizer:tap]; 

Hai:

1) Triển khai mã dưới đây. Bạn nên trả lại NO khi điểm nằm trong các nút.

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer 
{ 
    CGPoint point = [gestureRecognizer locationInView:self.view]; 

    NSLog(@"x = %.0f, y = %.0f", point.x, point.y); 
    if (CGRectContainsPoint(self.testBtn.layer.frame, point)) 
     return NO; 

    return YES; 
} 

ps. bạn nên nhập QuartzCore.h để truy cập thuộc tính của lớp.

#import <QuartzCore/QuartzCore.h> 
+0

Cảm ơn bạn đã giải pháp! Nó đã giúp rất nhiều –

5

Chỉ cần sử dụng bất động sản "cancelsTouchesInView" (NO) trên UITapGestureRecognizer khai thác

Ví dụ:

UITapGestureRecognizer *gesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didTap)]; 
gesture.cancelsTouchesInView = NO; 
[self.view addGestureRecognizer:gesture]; 
+1

+1 đó là cách dễ nhất. –

+0

@ JarnoV làm thế nào tôi có thể làm điều đó từ Xamarin IOS? –

+0

@ JorgeWanderSantanaUreña, tôi không có kinh nghiệm với Xamarin .. Xin lỗi;) – JarnoV

0

Override phương pháp nút cha mẹ xem pointinside của bạn, thiết lập một kích thước khung hình tùy chỉnh mới có chứa của bạn nút.

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