1. 程式人生 > >ios 中按鈕組(類似ButtonGroup)的實現

ios 中按鈕組(類似ButtonGroup)的實現

ios中我們可能需要用到多個按鈕單選的情況,類似於C#中的ButtonGroup,我遇到的情況是按鈕比較大,是一張圖片,多個帶圖片按鈕提供選擇,只能選擇一個按鈕,選擇另一個按鈕後,原來選中的按鈕就會取消選中。

利用UIButton的兩個State設定選中和未選中時不同的圖片: 

UIControlStateNormal   設定為image1.png

UIControlStateSelected   設定為image2.png

selectedButton表示當前選中的按鈕,未選中設為nil

按鈕被選中函式觸發後,判斷selectedButton是否是當前按的按鈕, 若是將當前的按鈕的selected屬性設為No, 並將selectedButton設為nil. 若不是當前按的按鈕, 將selectedButton的selected屬性設為No, 當前按鈕的selected屬性設為YES,並將selctedButton設為當前按鈕,  若selectedButton為nil,  則將當前按鈕的slected屬性設為YES, slectedButton設為當前按鈕.

程式碼如下:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    [self.button1 setImage:[UIImage imageNamed:@"elephant1.png"] forState:UIControlStateNormal];
    [self.button1 setImage:[UIImage imageNamed:@"elephant2.png"] forState:UIControlStateSelected];
    [self.button1 addTarget:self action:@selector(clickButton:) forControlEvents:UIControlEventTouchUpInside];
    
    [self.button2 setImage:[UIImage imageNamed:@"cow1.png"] forState:UIControlStateNormal];
    [self.button2 setImage:[UIImage imageNamed:@"cow2.png"] forState:UIControlStateSelected];
    [self.button2 addTarget:self action:@selector(clickButton:) forControlEvents:UIControlEventTouchUpInside];
    
    [self.button3 setImage:[UIImage imageNamed:@"elephant1.png"] forState:UIControlStateNormal];
    [self.button3 setImage:[UIImage imageNamed:@"elephant2.png"] forState:UIControlStateSelected];
    [self.button3 addTarget:self action:@selector(clickButton:) forControlEvents:UIControlEventTouchUpInside];    

    [self.button4 setImage:[UIImage imageNamed:@"cow1.png"] forState:UIControlStateNormal];
    [self.button4 setImage:[UIImage imageNamed:@"cow2.png"] forState:UIControlStateSelected];
    [self.button4 addTarget:self action:@selector(clickButton:) forControlEvents:UIControlEventTouchUpInside];
}

- (void)clickButton:(UIButton*)button{

    if (selectedButton != nil) {
        [selectedButton setSelected:NO];
    }
    if (selectedButton == button) {
        [button setSelected:NO];
        selectedButton = nil;
    }
    else{
        [button setSelected:YES];
        selectedButton = button;        
    }
    

}