根據我的標題,我正在用一些UIButton構建一個視圖。 我在考慮將2個動作連接到一個UIButton事件,因爲該按鈕需要做兩件事,但我需要按照一定的順序來做。當爲同一事件提供多個IBActions時,IBActions會觸發什麼
無論我如何嘗試,似乎都無法改變動作觸發的順序。有沒有辦法讓我來決定這個,還是它是隨機的?
當我在界面生成器中右鍵單擊UIButton時,我看到兩個動作都添加到同一個事件中,但不管它們出現的順序是否改變了觸發順序。
希望你們中的一些人能幫助我。
根據我的標題,我正在用一些UIButton構建一個視圖。 我在考慮將2個動作連接到一個UIButton事件,因爲該按鈕需要做兩件事,但我需要按照一定的順序來做。當爲同一事件提供多個IBActions時,IBActions會觸發什麼
無論我如何嘗試,似乎都無法改變動作觸發的順序。有沒有辦法讓我來決定這個,還是它是隨機的?
當我在界面生成器中右鍵單擊UIButton時,我看到兩個動作都添加到同一個事件中,但不管它們出現的順序是否改變了觸發順序。
希望你們中的一些人能幫助我。
UIButtons是UIControl的子類,它使用了目標 - 動作模式進行交流活動。用於添加目標的程序界面通過addTarget:action:forControlEvents:
方法公開。在接口生成器中連接IBActions只是使用相同接口的可視化方式;當加載包含它的.xib文件時,bundle loader將在unarchived按鈕上調用該方法。
關鍵問題是該方法中的參數target
被UIControl內部添加到NSSet(或可變子類)中。根據定義,NSSets是無序的。這意味着當按鈕需要枚舉它的一組目標來分派事件時,枚舉的順序沒有很好的定義。
既然沒有明確的方式來表示,其中的動作應該被髮送的順序,你應該不依賴的順序。取而代之的是,創建一個單獨的行動,調用您所需的順序關心的兩個動作:
- (IBAction)doFooAndBar:(id)sender
{
[self foo:sender];
[self bar:sender];
}
在任何書或甚至使用Google搜索時,您都不會得到對此問題的答案。
我曾親自試過,它按照IBActions名稱的字母順序工作。奇怪,但它是一個事實!
測試實施例下面:
helloworld.h
-(IBAction)a:(id)sender;
-(IBAction)b:(id)sender;
-(IBAction)c:(id)sender;
-(IBAction)d:(id)sender;
-(IBAction)e:(id)sender;
-(IBAction)f:(id)sender;
動作)G:(ID)發送者;
**HelloWorld.m file**
-(IBAction)a:(id)sender
{
NSLog(@"I clicked a");
}
-(IBAction)f:(id)sender
{
NSLog(@"I clicked f");
}
-(IBAction)b:(id)sender
{
NSLog(@"I clicked b");
}
-(IBAction)c:(id)sender
{
NSLog(@"I clicked c");
}
-(IBAction)d:(id)sender
{
NSLog(@"I clicked d");
}
-(IBAction)e:(id)sender
{
NSLog(@"I clicked e");
}
現在這些行動[觸摸的內心]事件以任意順序鏈接到您的按鈕。你會發現同樣的輸出,如下圖所示:
輸出
2012-03-19 15:35:34.548 I clicked a
2012-03-19 15:35:34.554 I clicked b
2012-03-19 15:35:34.564 I clicked c
2012-03-19 15:35:34.566 I clicked d
2012-03-19 15:35:34.568 I clicked e
2012-03-19 15:35:34.572 I clicked f
乾杯!
快樂編碼!
我很想知道這是否是您將它們添加到控件的順序 – QED
似乎合理。這在我的應用程序中已經有一段時間了。 –