2013-02-08 137 views
6

我有一種情況,用戶將觸摸一個UIButton,雖然他們可能已經觸摸它,但我需要能夠取消它或導致它失敗。取消觸摸它時的UIButton觸摸

我試圖使用button.enabled和userInteractionEnabled,但都沒有在飛行中工作。兩者都必須在觸摸開始之前設置。

我可以讓按鈕在被觸摸後和失敗時失敗嗎?

+0

你想取消後臺進程或連接到按鈕的直接插座? – Bartu 2013-02-08 16:34:32

回答

0

只要有BOOL變量,指出哪個按鈕動作是允許或不允許的,並檢查必要的地方。啓用,userinteractionenabled只是在一般

+0

但是如何在按鈕被按下後取消觸摸?用布爾我可以保持接觸不做任何事情,但它仍然會顯示它正在被觸摸。 – daveMac 2013-02-08 16:18:37

0

不知道禁用你的問題倒是,但你可以基於像下面

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

[button addTarget:self 
        action:@selector(onTouchDown:) 
      forControlEvents:(UIControlEventTouchDown)]; 

[button addTarget:self 
        action:@selector(onTouchUpOutside:) 
      forControlEvents:(UIControlEventTouchUpOutside)]; 

請原諒我,如果這是沒有幫助的,或者你是什麼控制事件有歧行動尋找。

+0

我很欣賞這種努力,但我不確定那就是我所追求的。 – daveMac 2013-02-08 16:24:54

2

你可以做的一件事來解決你的問題是自定義按鈕的按下的外觀,以滿足您的需求。用途: – setBackgroundImage:@"NormalStateImage.png" forState: UIControlStateNormal – setBackgroundImage:@"HighlightedStateImage.png" forState: UIControlStateHighlighted

設置屬性adjustsImageWhenHighlighted爲NO 和adjustsImageWhenDisabled屬性爲NO

+0

這是我目前的解決方法,但似乎我應該能夠以某種方式取消該觸摸。 – daveMac 2013-02-08 16:26:20

+0

您可以取消觸摸。但你必須以不同的方式處理它們。你必須實現'UIResponder'響應觸摸事件。檢查此蘋果文檔http://developer.apple.com/library/ios/#documentation/uikit/reference/UIResponder_Class/Reference/Reference.html和本教程http://mobile.tutsplus.com/tutorials/iphone/ios -quick-tip-detecting-touch/ – Luke 2013-02-08 16:55:53

+0

不會像hitTest一樣簡單嗎? – daveMac 2013-02-08 17:13:43

6

您需要註冊兩個動作爲您的按鈕,一個用於觸碰和一個觸摸起來。在接下來,您可以決定是否要取消並觸摸起來,寫下按鈕按下的實際邏輯。

[button addTarget:self action:@selector(touchDown:) forControlEvents:UIControlEventTouchDown]; 

- (IBAction)touchDown:(id)sender 
{ 
    UIButton *b = (UIButton*)sender; 

    // Call this if you wish to cancel the event tracking 
    [b cancelTrackingWithEvent:nil]; 
} 
1

這可以用於任何UIButton。如果你想取消在用戶觸摸下就可以了時間按下按鈕,這些步驟應該工作:

  1. 設置的處理程序,其中取消需要檢查的事件。在這種情況下,當按鈕關閉時。

    [yourButton addTarget:self action:@selector(buttonIsDownHandler :) forControlEvents:UIControlEventTouchDown];

  2. 在處理程序中,決定是否取消壓榨

    - (IBAction爲)buttonIsDownHandler:(ID)發送方 { 如果(needToCancelThisPress) { [yourButton cancelTrackingWithEvent:無]; } }

  3. 按鈕的處理程序UIControlEventTouchCancel將在取消後調用。

按鈕觸摸取消可以隨時完成。例如,如果您想追蹤用戶何時按下並保持太久,您可以在處理程序中啓動計時器,然後在計時器到期時取消觸摸。