2015-06-22 100 views
2

我有一個UIButton。我按如下方式綁定了一個目標。多次點擊UIButton觸發目標函數多次

[button addTarget:self action:@selector(myFunction) 
       forControlEvents:UIControlEventTouchUpInside]; 

當我多次點擊我的按鈕多次調用目標函數多次。 在攻絲按鈕我提出了一個新的視圖控制器。 當我點擊3次快速,然後我的新視圖控制器顯示3次。

這是愚蠢的。一旦視圖被轉移到一個新的視圖控制器,什麼是觸發該功能的重點。爲什麼地獄蘋果會做這樣愚蠢的事情?

請幫忙嗎?

回答

3

首先它不是蘋果的bug。它應該手動處理。所以,請按照下列步驟

首先讓你的全球您的按鈕的實例,然後做這個

.h文件中

@property (weak, nonatomic) IBOutlet UIButton *btn; 

.m文件

- (IBAction)myFunction:(id)sender 
{ 
    self.btn.userInteractionEnabled = NO; 
} 

-(void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
    self.btn.userInteractionEnabled = YES; 
} 
2

帶一個像「isItDone」這樣的全局布爾標誌或者它在singleton類中聲明。

    在「myFunction的」
  1. 將其設置爲假
  2. 你推在該類的「ViewDidAppear」方法設置爲真實的函數視圖控制器。

它會幫助你。 我有同樣的問題,它是使用一個全局變量管理它的好方法。

1

我認爲這會對你有所幫助。

更改您的通話功能,這樣

- (IBAction)myFunction:(id)sender 
{ 
    UIButton *button = (UIButton*)sender; 
    button.userInteractionEnabled = NO; 
} 

,如果你想存儲的選擇調用你的函數類似這樣的

[button addTarget:self action:@selector(myFunction:) 
      forControlEvents:UIControlEventTouchUpInside]; 

櫃面你回來視圖控制器,然後只需要保存一個布爾標誌來存儲它是否點擊一次。

+0

我的看法,但使用該代碼的用戶只能在點擊鏈接的,我說得對還是我錯過理解的東西嗎? –

+0

沒有喲對。根據我的回答,用戶可以只點擊一次按鈕,如果你想讓用戶在任何情況下再次點擊按鈕,那麼你可以通過檢查來啓用用戶交互。 –

+0

確保你正在調用函數(myFunction :)不僅(myFunction) –

1

將IBOutlet中到您的按鈕,在viewWillAppear方法中寫入,

button.userInteractionEnabled = YES; 

,當你點擊按鈕設置,

button.userInteractionEnabled = NO; 
+0

你和我的答案有什麼區別? –

+0

IBOutlet的需求是什麼? –