2012-08-11 121 views
0

我已經以編程方式更改了UIButton的按鈕標題。我還分配了一個操作來更改按鈕標題。現在當我點擊按鈕時,它會觸發兩個動作(一個具有相同的按鈕標題,另一個具有更改)。但是,我想只觸發一個操作來更改標題按鈕。按鈕在按下更改後的按鈕標題時觸發兩個操作

我該怎麼辦?任何幫助,將不勝感激。

+0

只是簡單的解決方案是隻分配一個動作方法的按鈕,並使用它的標題文本作爲參數,並根據執行不同的語句使用if-else語句:) – 2012-08-11 11:55:12

回答

1

兩個解決方案。在方法之間切換目標/動作或根據某些狀態決定要執行的操作。

1.

- (void)method1:(id)sender; 
{ 
    [sender removeTarget:nil action:NULL forControlEvents:UIControlEventTouchUpInside]; 
    [sender addTarget:self action:@selector(method2:) forControlEvents:UIControlEventTouchUpInside]; 
} 

- (void)method2:(id)sender; 
{ 
    [sender removeTarget:nil action:NULL forControlEvents:UIControlEventTouchUpInside]; 
    [sender addTarget:self action:@selector(method1:) forControlEvents:UIControlEventTouchUpInside]; 
} 

2a上。

- (void)buttonTapped; 
{ 
    if (self.someState) { 

    } else { 

    } 
} 

2b。

- (void)buttonTapped:(UIButton *)button; 
{ 
    if ([[button titleForState:UIControlStateNormal] isEqualToString:@"First title"]) { 

    } else { 

    } 
} 
+0

謝謝,保羅。這工作完美無瑕。 – 2012-08-11 15:56:50

0

如果爲控件狀態touchupinside的同一個按鈕分配兩個動作,它將始終觸發兩個動作。您應該刪除第一個動作,同時添加第二個動作並刪除第二個動作,並在選擇器功能的末尾再次添加第一個動作。

以下是該按鈕的默認操作;

[button addTarget:self:action:@selector(actionOne)forControlEvents:UIControlStateTouchUpInside] 

在actionOne中,您可以調用remove observer for第一個動作並添加第二個動作。

[button addTarget:self:action:@selector(actionTwo)forControlEvents:UIControlStateTouchUpInside] 

而且在actionTwo功能,你做反向

+0

嗨。謝謝您的幫助。但是當我使用不同的UIControlState時,另一個標題不會在同一個按鈕上觸發不同的操作。看看我的代碼。我可能會做錯事。 if([urlresponse status code] == 200){myButton setTitle:@「Unfollow」forState:UIControlStateNormal]; //標題改變 } 如果([myButton.currentTitle isEqualToString:@ 「取消關注」]){ [myButton的addTarget:自動作:@selector(unfollowButtonPressed :) forControlEvents:UIControlEventTouchUpInside]; } – 2012-08-11 12:49:42

0

而不是使兩個條件

f([urlresponse status code] == 200) 
{ 
[myButton setTitle:@"Unfollow" forState:UIControlStateNormal]; //title changed 

[myButton addTarget:self action:@selector(unfollowButtonPressed:) forControlEvents:UIControlEventTouchUpInside]; 

} 

這可能是你的情況有幫助的。