2012-12-07 176 views
0

我創建了兩個按鈕,它們彼此相鄰以模仿分段控件。我這樣做是爲了定製超出UIKit允許的外觀。我決定使用選定的屬性來保持按下按鈕。我有兩個圖像,每個狀態正常和選擇一個。iPhone按鈕選中狀態

問題是,當我選擇一個按鈕時,由於高光狀態,按鈕會突出顯示並變黑。我決定使用選定的圖像作爲突出顯示狀態,但閃爍,任何想法或建議。

- (void)leftSegmentPressed:(id)sender 
{ 
    if ([sender isSelected]) { 
     [sender setSelected:NO]; 
    } 
    else { 
     [sender setSelected:YES]; 
    } 
} 

回答

1

對於「選定」按鈕,禁用它並手動切換狀態圖像。

- (void) viewDidLoad 
{ 
    [rightSegmentButton setImage:[UIImage imageNamed:@"unselected.png"] forState:UIControlStateNormal]; 
    [rightSegmentButton setImage:[UIImage imageNamed:@"selected.png"] forState:UIControlStateDisabled]; 
    [leftSegmentButton setImage:[UIImage imageNamed:@"unselected.png"] forState:UIControlStateNormal]; 
    [leftSegmentButton setImage:[UIImage imageNamed:@"selected.png"] forState:UIControlStateDisabled]; 
} 

- (void)leftSegmentPressed:(id)sender 
{ 
    sender.enabled = NO; 
    rightSegmentButton.enabled = YES; 
} 

- (void)rightSegmentPressed:(id)sender 
{ 
    sender.enabled = NO; 
    leftSegmentButton.enabled = YES; 
} 
+0

讓我試試這個 – Vikings

+0

這種做法任何運氣? –

+0

這工作正常,我也使用選定的圖像突出顯示的狀態,以避免輕微的延遲 – Vikings

0

[button setAdjustsImageWhenHighlighted:NO];

這將防止閃爍。

+0

這種解決方案是更少的代碼,但似乎有延遲 – Vikings

+0

不知道,當你說,有一個延遲。除非你使用的圖像很大,否則不應該有延遲。你可以請嘗試與非常小的圖像。我剛剛創建了一個項目來模擬你的問題,它對我很好。任何方式,祝你好運,希望你很快找到解決方案。 – Srikanth

1

檢查您提供的圖片是否在您的Bundle或您的圖片名稱是否在lower case。然後寫出這樣

[button1 setImage:[UIImage imageNamed:@"normal1.png"] forState:UIControlStateNormal]; 
[button1 setImage:[UIImage imageNamed:@"selected1.png"] forState:UIControlStateSelected]; 
[button2 setImage:[UIImage imageNamed:@"normal2.png"] forState:UIControlStateNormal]; 
[button2 setImage:[UIImage imageNamed:@"selected2.png"] forState:UIControlStateSelected]; 

button1.tag = 1; 
button2.tag = 2; 

[button1 addTarget:self action:@selector(buttonSelected:) forControlEvents:UIControlEventTouchUpInside] 
[button2 addTarget:self action:@selector(buttonSelected:) forControlEvents:UIControlEventTouchUpInside] 

在您的按鈕事件方法

-(void)buttonSelected:(id)sender { 
    if([sender tag] == 1) { 
     button1.selected = YES; 
     button2.selected = NO; 
    } else { 
     button1.selected = NO; 
     button2.selected = YES; 
    } 
} 
0
UIButton *yourButton1 = [[UIButton buttonWithType:UIButtonTypeRoundedRect] retain]; 
yourButton1.frame = CGRectMake(110.0, 360.0, 100.0, 30.0); 
[yourButton1 setTitle:@"Left" forState:UIControlStateNormal]; 
yourButton.backgroundColor = [UIColor clearColor]; 
yourButton1.tag = 1; 
[yourButton1 setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal ];  

UIImage *buttonImageNormal = [UIImage imageNamed:@"yourNormalImage.png"];// set normal image 
UIImage *strechableButtonImageNormal = [buttonImageNormal stretchableImageWithLeftCapWidth:12 topCapHeight:0]; 
[yourButton1 setBackgroundImage:strechableButtonImageNormal forState:UIControlStateNormal]; 

UIImage *buttonImagePressed = [UIImage imageNamed:@"yourSelectedImage.png"];// set selected image 
UIImage *strechableButtonImagePressed = [buttonImagePressed stretchableImageWithLeftCapWidth:12 topCapHeight:0]; 
[yourButton1 setBackgroundImage:strechableButtonImagePressed forState:UIControlStateHighlighted]; 

[yourButton1 addTarget:self action:@selector(leftSegmentPressed:) forControlEvents:UIControlEventTouchUpInside]; 
[self.view addSubview:yourButton1]; 

另外第二個按鈕做相同。

,並設置婁代碼的操作方法..

- (void)leftSegmentPressed:(id)sender 
{ 
    UIButton *btnTemp = (UIBUtton *)sender; 
    if (btnTemp.tag == 1) { 
     [yourButton1 setSelected:YES]; 
     [yourButton2 setSelected:NO]; 
    } 
    else { 
     [yourButton1 setSelected:NO]; 
     [yourButton2 setSelected:YES]; 
    } 
}