2011-03-03 61 views
0

我試圖在按(僅按住)按鈕時激活我的代碼的一部分。當按鈕被釋放時,我希望我的標籤再次隱藏。有沒有辦法有效地做到這一點?我有一個IBAction(按鈕)和一個IBOutlet(一個文本框),此代碼設置爲動作:在按鈕上激活代碼僅按住

- (IBAction)toggleIt:(id)sender { 
    if ([myDescription isHidden]) { 
     [myDescription setHidden:NO]; 
    } else { 
     [myDescription setHidden:YES]; 
    } 
} 

任何幫助? (在假人計)

扎克

回答

1

恐怕沒有在Mac上的IB這樣的方式,因爲它有可能在iOS上:

的UIKit與AppKit的 - 儘管在許多方面相似 - 是兩個完全不同的野獸。 AppKit的傳統可以追溯到20世紀90年代(甚至可能是20世紀80年代後期),它通過幾個地方展示(我在看你,NSCell),UIKit的設計經歷了大約20年AppKit的。

儘管您可以很容易地告訴UIControl何時將調用其操作(並且可以針對不同事件執行不同操作),但NSControl僅允許您指定要發送的單個操作。

如果您不想覆蓋-[NSButtonCell stopTracking:at:inView:mouseIsUp:]-[NSButton mouseDown:]-[NSButton mouseUp:],最簡單的方法就是將按鈕設置爲連續發送其操作。這可能是IB中的骨骼(在「控件」類別下的「屬性」檢查器中)。

接下來的事情將是使你的描述層支持和重寫你的操作方法在這樣的方式:

- (IBAction)toggleIt:(id)sender { 
    CALayer *descriptionLayer = [myDescription layer]; 
    [descriptionLayer setHidden:NO]; // (ab-)use implicit animation 
    [descriptionlayer performSelector:@selector(setHidden:) withObject:@"" afterDelay:.1]; 
} 

工作原理:

「隱藏」的CALayer -property具有動畫能力,因此,更改它將導致隱式動畫。由於Objective C只是C,因此不是0x0的任何內容都被解釋爲YES,這就是第三行觸發的地方:空行顯然不是0x0,因此在此操作返回後不久,該層將被調用以隱藏。但是由於CATransitions逐漸發生並且可以在課程中進行更新,因此這隻會在動作不再觸發時影響層的可見性 - 即不再按下按鈕。

0

您可以使用UIControlEventTouchDown隱藏自己的標籤,然後顯示它在UIControlEventTouchUpInside事件。

-(IBAction)buttonHit { 
    [myDescription setHidden:NO]; 
} 

-(IBAction)buttonReleased { 
    [myDescription setHidden:YES]; 
} 
+0

有沒有辦法做到這一點沒有計時器?我不明白爲什麼我想延遲我的代碼 - 當按鈕關閉時,隱藏文本框。發佈後,再次顯示。似乎它會很容易,不需要計時器? – Zakman411 2011-03-03 05:23:27

+0

@ Zakman411:我想我誤解了你原來的問題。我已經更新了我的回覆。 – FreeAsInBeer 2011-03-03 05:31:39

+0

我看到 - 我將如何在Interface Builder中實現buttonHit和buttonReleased?我看不出要拖到每個IBAction的內容? – Zakman411 2011-03-03 05:52:32