我試圖找到這樣做的最佳方法。我有一個視圖控制器上的5個自定義按鈕,我試圖讓按鈕保持突出顯示,如果它被點擊。我知道如何做到這一點,但我試圖只允許1個按鈕一次突出顯示。因此,如果用戶點擊某個按鈕並突出顯示該按鈕,但點擊另一個按鈕,則最近點擊的按鈕將保持突出顯示,並且前一個按鈕不會亮起。什麼是實現這一目標的最佳方式?的iOS:設置按鈕按下的狀態
回答
你應該保留所有按鈕的參考(例如,如果使用IB,有像@property (nonatomic, strong) IBOutlet UIButton *button1;
您所有的按鈕在你的代碼的鏈接)。
然後所有的按鈕鏈接到同一方法上的按鈕的新聞。我會叫它buttonPressed
。
Impement這樣的:
- (IBAction)buttonPressed:(id)sender {
UIButton *buttonPressed = (UIButton*)sender;
NSArray *buttons = [NSArray arrayWithObjects:_button1, _button2, _button3, nil];
bool buttonIsHighlighted = NO;
// Check if a button is already highlighted
for (UIButton *button in buttons) {
if (button.highlighted) {
buttonIsHighlighted = YES;
}
}
// If a button is highlighted, un-highlight all except the one pressed
// If no button is highlighted, just highlight the right one
if (buttonIsHighlighted) {
for (UIButton *button in buttons) {
if (buttonPressed == button) {
buttonIsHighlighted = YES;
} else {
button.highlighted = NO;
}
}
} else {
buttonPressed.highlighted = YES;
}
}
我不能對此進行測試代碼,但我敢肯定它應該工作。讓我知道是否有錯。
謝謝..... ..... :) – Adi 2014-09-03 12:17:24
解決方案1: 將按鈕放在NSArray
中,當用戶單擊按鈕時,檢查是否突出顯示了另一個按鈕。如果YES
,請忽略它並突出顯示按下的那個。如果NO
,直接高亮顯示按下的那個。
解決方案2: 您可以將突出顯示的按鈕保存在@interface
或@property
中聲明的全局變量中。當用戶點擊新的高亮顯示之前。
嗯,看起來像你的解決方案1是幾乎什麼我建議,哈哈。我不是真的抓住第二個嗎? – rdurand 2013-02-22 15:52:07
你需要算法中或完整的代碼? – 2013-02-22 15:35:15
將當前按鈕存儲在屬性中,並在選擇新屬性時取消選擇它? – Kevin 2013-02-22 15:38:14
我不相信有可能改變Xcode中按鈕**的行爲。**儘管如此,在iOS應用程序中這樣做**當然是可以的。 – 2013-02-22 15:38:34