2012-07-13 31 views
0

我正在構建一種帶有許多uibutton的檢查表,我使用的是代碼(不是IB)。我希望在選擇某些按鈕時,不能選擇其他按鈕。例如,我有一排按鈕將是低,中,高。我不希望用戶有可能選擇2個選項(如果他們想改變他們的選擇,那麼一次只能選2個)。關聯UIButton

我知道我的方法的一般結構,這裏是我到目前爲止有:

-(void)addButtons這是我將填充按鈕視圖(只顯示一個按鈕,在這裏,但也有不少):

-(void)addButtons{ 

    UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    [button addTarget:self action:@selector(clicked:) forControlEvents:UIControlEventTouchUpInside]; 
    [button setTitle:@"" forState:UIControlStateNormal]; 
    button.frame = CGRectMake(209, 54, 127, 18); 
    button.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 
    [imageView addSubview:button]; 

} 

-(void)clicked:(UIButton *)sender這是一個按鈕被點擊時將調用的方法。我希望它將自己作爲參數提交。該按鈕然後將改變其外觀以表示它已被點擊。我使它變得透明的原因是因爲我在圖像頂部有按鈕,您需要查看它們下方的按鈕。我也不認爲sender.backgroundColor = [UIColor redColor];會像我想要的那樣工作,但那不重要。

-(void)clicked:(UIButton *)sender{ 

    sender.alpha = 0.5; 
    sender.backgroundColor = [UIColor redColor]; 

    [self setRelatedButtons:sender]; 

} 

-(void)setRelatedButtons'而這正是我將確保每個「設置」只有一個按鈕被選中

-(void)setRelatedButtons:(UIButton *)sender{ 

    //since I know this button is clicked 
    //set related buttons to unclicked 

} 

總之一切的方法,這裏是什麼我想知道:

1)如何設置一個按鈕的外觀sta你選擇了?

2)我應該將什麼傳遞給我的clickedsetRelatedButtons方法來識別當前按鈕?現在我有按鈕本身,但有更好的?

3)關聯某些按鈕的最佳方式是什麼?我可以爲每一組按鈕使用一個數組,但我希望有更好的方法。我可以使用typedef嗎? (從來沒有使用過其中之一)

+0

這實際上是3個問題。 – Dustin 2012-07-13 16:05:24

+1

在''clicked:'方法中使用這個:'((UIButton *)sender).backgroundColor = [UIColor redColor];' – 2012-07-13 16:41:16

回答

1

要設置按鈕的外觀保持選定狀態,您可以做很多不同的事情。你可以改變標籤,背景顏色,文字顏色等等。 This可能有幫助。只是你知道,如果你想把它提交給應用商店,你不能使用實際的選擇狀態來顯示已經選擇了一個按鈕(所以不要做button.selected = YES)。蘋果明確禁止這一點。

如果要取消選擇所有其他按鈕,只需將所有按鈕的外觀設置爲在單擊一個按鈕時未選中。在你這樣做之後,將發送消息的按鈕設置爲選中(無論你從上面決定)。把你的按鈕放在一個數組中,這樣你可以創建一個for循環來訪問它們(NSMutableArray將對addObject有幫助)。

要回答你的第二個問題,通過UIButton *本身沒問題(你實際上只是傳遞一個指針)。這樣做的好處是能夠執行諸如[button doSomething]之類的操作,而不必在數組或其他數據類型中找到它。

我不太確定你的第三個問題在問什麼,但是如果你願意,你可以繼承UIButton。實際上,每一組按鈕的數組聽起來都是一個好主意。你甚至可以做一組數組。或者你可以使用方法來創建一個自定義持有者類的數組,並返回你想要的東西。

如果你使用數組,你可以傳遞一個整數你addButton方法,告訴方法,陣列(或複雜的陣列的一部分),以便將按鈕英寸

此外,儘量保持你的問題一件事;如果他們必須回答多個問題,人們不太可能回答你的問題。你可以根據自己的意願詢問很多問題,只需單獨詢問。

+0

感謝您的迴應,我將在未來將我的問題分開 – BloonsTowerDefence 2012-07-13 16:42:47