2012-12-13 89 views
7

我有一個包含大量UIButton的項目,使用xcode 4.5和故事板和ARC。經過ios6測試後,一切都很順利。但在ios5中,UIButton觸發內部事件不起作用,該操作未被調用。我試圖使用觸摸,它的工作原理。不過,我有很多UIButton,我無法一個一個改變。更重要的是,觸碰事件的確給人一種很好的體驗。在viewDidLoad中 :UIButton觸摸內部事件不在ios5中工作,而在ios6中沒問題

我在我的許多視圖控制器的使用下面的代碼

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

[self.view addGestureRecognizer:tap]; 

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

,這可能是原因。我會在稍後檢查。但它適用於ios6。 你知道什麼是錯的嗎?非常感謝!

回答

16

我對你有同樣的問題。 這是因爲當您註冊的gestureRecognizer捕獲事件時,iOS5中的觸摸事件被阻止。

有兩種解決方案。

一:

1)在你的視圖中添加一個新的視圖。它應該與按鈕具有相同的級別。按鈕的優先級應高於新視圖。

2)將'addGestureRecognizer'的調用更改爲新視圖。

[self.newView addGestureRecognizer:tap]; 

二:

1)實施下面的代碼。當點在按鈕中時,您應該返回NO。

- (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。 你應該導入QuartzCore.h來訪問圖層的屬性。

#import <QuartzCore/QuartzCore.h> 
+0

感謝您的解決方案!它幫助了很多 –

5

只需使用屬性 「cancelsTouchesInView」(NO)上UITapGestureRecognizer挖掘

實施例:

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

+1這是最簡單的方法。 –

+0

@JarnoV我怎麼能從Xamarin IOS做到這一點? –

+0

@JorgeWanderSantanaUreña,我與Xamarin沒有經驗..對不起;) – JarnoV

0

覆蓋你的按鈕父視圖pointinside方法,設定包含新的自定義幀大小的按鈕。