2012-12-07 118 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]; 
    } 
}