2012-04-27 79 views
2

我的應用程序中有一個系統設置,用戶可以捏住視圖將其展開爲全屏(如Flipboard)。但是,當我這樣做時,我想禁用一些在兩種模式下都可見的按鈕。通常它工作正常,但它在以下邊緣情況失敗:已禁用的按鈕仍然會調用目標

1)非縮放模式按鈕(不要放開)

2)夾視圖放大,並等待它完成動畫。該按鈕然後將其userInteractionEnabled設置爲NO

3)釋放按鈕,無論如何調用目標函數。我在目標函數中放置了一個斷點,並使用lldb來檢查按鈕,並且userInteractionEnabled確實設置爲NO

我錯在期待一個被禁用的按鈕不應該觸發它的目標?我應該在目標函數中檢查這個嗎?

這裏是實際禁用按鈕的功能,以防萬一你想看(編輯:似乎有一些混淆。下面的代碼沒有什麼問題,我只是把它包括在內是徹底的。)

//The function that disables the buttons 
- (void)disableButtons:(SO2MenuButtons)buttons 
{ 
    UIView *view = nil; 
    if(buttons & SO2Mokuji) 
    { 
     view = [self.view viewWithTag:151]; 
     view.alpha = 0.5; 
     view.userInteractionEnabled = NO; 
    } 
    if(buttons & SO2NoteView) 
    { 
     view = [self.view viewWithTag:152]; 
     view.alpha = 0.5; 
     view.userInteractionEnabled = NO; 
    } 
    //etc, etc... 
} 

UPDATE:

我改變上述本具有相同的結果

- (void)disableButtons:(SO2MenuButtons)buttons 
{ 
    UIButton *view = nil; 
    if(buttons & SO2Mokuji) 
    { 
     view = (UIButton *)[self.view viewWithTag:151]; 
     view.enabled = NO; 
    } 
    if(buttons & SO2NoteView) 
    { 
     view = (UIButton *)[self.view viewWithTag:152]; 
     view.enabled = NO; 
    } 
    //etc, etc... 
} 

編輯看來我並沒有清楚地傳達出問題所在,所以我把一個簡單的項目放在一起展示了問題。您可以下載它here(根據您閱讀此消息,上一個鏈接可能已過期)。問題在於該按鈕在其被禁用後仍然在觸發其目標方法。看了看上面的頁面是什麼樣子,我爲使用提交程序而道歉......我不知道現在共享項目的流行方式是什麼> _ <。不要點擊大綠色下載按鈕,點擊,說:「下載文件」的一個

+0

你有什麼問題,你想啓用按鈕? – Dinesh 2012-04-27 05:46:28

+0

@Dinesh我不希望它在我禁用它之後觸發目標方法。 – borrrden 2012-04-27 05:48:16

+0

你的問題是當按鈕禁用狀態時觸發目標方法..! – Dinesh 2012-04-27 05:50:25

回答

1

我找到了一個解決方法,在這些按鈕上設置exclusiveTouchYES。這樣用戶不能在按住按鈕的同時捏住視圖。當然,這並沒有真正解決原始問題,所以我現在不會接受這個答案。如果沒有人發佈一段時間的答案,我會接受這一個。

1

看起來好像你正在使用的按位與運算&,而你想要的是邏輯運算符& & 。

+0

不,我想使用按位。 SO2MenuButtons是一個有點領域,它可以幫助我確定禁用哪些按鈕。 – borrrden 2012-04-27 06:15:36