2010-02-12 27 views
58

有沒有一種方法可以爲開關狀態實現具有自定義圖形的UISwitch?或者換一種方式,一個帶有UISwitch功能的UIButton?具有UISwitch功能的iPhone UIButton

+5

誰投票決定關閉這個問題作爲一個確切的重複,你至少應該提供一個評論解釋其發佈它的副本。 – Jasarien 2010-02-12 23:38:54

回答

99

UIButton已經支持「切換」功能。

只需在Interface Builder中爲「Selected State Configuration」設置不同的圖像,然後使用UIButtonselected屬性切換其狀態。

+0

點擊/選擇後恢復正常。這是我沒有做過的IB。 \t [favButton setImage:favOff forState:UIControlStateNormal]; \t [favButton setImage:favOn forState:UIControlStateHighlighted]; \t [favButton setImage:favOn forState:UIControlStateSelected]; \t [favButton setBackgroundColor:[UIColor clearColor]]; \t \t [self.view addSubview:favButton]; – scud 2010-02-12 21:24:48

+3

好的「setSelected」是我正在尋找的財產,謝謝 – scud 2010-02-12 21:43:44

+0

UISwitch很好地動畫了它的狀態變化。我想知道如何動畫一個UIButton改變狀態。有任何想法嗎? – radven 2010-12-09 22:15:20

12

設置圖像在選定狀態顯示:

[button setImage:[UIImage imageNamed:@"btn_graphics"] forState:UIControlStateSelected]; 

,然後觸摸起來裏面選擇,設置:

button.selected = YES; 

,如果你希望它取消其它按鈕的選擇,設置:

otherButton.selected = NO; 
7

建立在PGB和nurne上面所說的基礎上,在你設置你的狀態並附上一個sele ctor(事件方法),你會想把這段代碼放在那個選擇器中。

- (IBAction)cost:(id)sender 
{ 
    //Toggle current state and save 
    self.buttonTest.selected = !self.buttonTest.selected; 

    /** 
    The rest of your method goes here. 
    */ 
} 
3

對於編程傾斜:

-(void) addToggleButton { 
    CGRect aframe = CGRectMake(0,0,100,100); 

    UIImage *selectedImage = [UIImage imageNamed:@"selected"]; 
    UIImage *unselectedImage = [UIImage imageNamed:@"unselected"]; 

    self.toggleUIButton = [[UIButton alloc] initWithFrame:aframe]; 
    [self.toggleUIButton setImage:unselectedImage forState:UIControlStateNormal]; 
    [self.toggleUIButton setImage:selectedImage forState:UIControlStateSelected]; 
    [self.toggleUIButton addTarget:self 
          action:@selector(clickToggle:) 
        forControlEvents:UIControlEventTouchUpInside]; 
    [self addSubview:self.toggleUIButton]; 
} 

-(void) clickToggle:(id) sender { 
    BOOL isSelected = [(UIButton *)sender isSelected]; 
    [(UIButton *) sender setSelected:!isSelected]; 
}