2014-12-02 34 views
0

我写了一个按钮,下面的代码为iOS8上的应用:UIButton的图像不是Hightlight更改或选择状态

 UIButton *btnBack = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [btnBack setFrame:CGRectMake(40, 30, 30, 30)]; 
    [btnBack setBackgroundImage:[UIImage imageNamed:@"btn_close.png"]forState:UIControlStateNormal]; 
    [btnBack setBackgroundImage:[UIImage imageNamed:@"btn_close_on.png"] forState:UIControlStateHighlighted|UIControlStateSelected]; 
    [btnBack addTarget:self action:@selector(btnBackClick:) forControlEvents:UIControlEventTouchUpInside]; 
    [self.view addSubview:btnBack]; 

而且方法时点击:

-(void) btnBackClick:(id)sender{ 
[self.navigationController popToRootViewControllerAnimated:YES]; 
} 

然而,背景当点击按钮时,图像不会改变。唯一的影响是灰色。

如果我在xib文件上绘制该按钮,图像更改就像一个魅力。

有什么问题吗?请帮忙。

回答

0
UIButton *btnBack = [UIButton buttonWithType:UIButtonTypeCustom]; 
[btnBack setFrame:CGRectMake(40, 30, 30, 30)]; 
[btnBack setBackgroundImage:[UIImage imageNamed:@"btn_close.png"]forState:UIControlStateNormal]; 
[btnBack setBackgroundImage:[UIImage imageNamed:@"btn_close_on.png"] forState:UIControlStateHighlighted|UIControlStateSelected]; 
[btnBack addTarget:self action:@selector(btnBackClick:) forControlEvents:UIControlEventTouchUpInside]; 
[btnBack setSelected:YES]; 
[self.view addSubview:btnBack]; 

// ********** *******更新

UIButton *btnBack = [UIButton buttonWithType:UIButtonTypeCustom]; 
[btnBack setFrame:CGRectMake(40, 30, 30, 30)]; 
[btnBack setBackgroundImage:[UIImage imageNamed:@"btn_close.png"]forState:UIControlStateNormal]; 
[btnBack setBackgroundImage:[UIImage imageNamed:@"btn_close_on.png"] forState:UIControlStateHighlighted]; 
[btnBack setBackgroundImage:[UIImage imageNamed:@"btn_close_on.png"] forState:UIControlStateSelected]; 
[btnBack addTarget:self action:@selector(btnBackClick:) forControlEvents:UIControlEventTouchUpInside]; 
[self.view addSubview:btnBack]; 

-(void)btnBackClick:(UIButton *)btn 
{ 
    if ([btn isSelected]) 
    { 
     [btn setSelected:NO]; 
    } 
    else 
     [btn setSelected:YES]; 
} 
+0

这神奇的作品就像一个魅力。非常感谢你。你能解释一下为什么吗? – 2014-12-02 11:44:06

+0

其实它不是检查枚举值(UIControlState)的正确过程。所以,起初我已将按钮设置为选定状态。请检查我更新的答案。它比以前更有价值。 – Monikanta 2014-12-03 07:01:43

+0

诀窍是:即使初始化按钮和setSelected:YES,但按钮在添加到视图中时仍会返回到正常状态。所以你原来的建议代码有效。 – 2014-12-04 03:31:30

0
-(void) btnBackClick:(id)sender{ 
    UIButton *myButton = (UIButton *)sender; 

    [myButton setSelected: YES]; // Add this line 
    [self.navigationController popToRootViewControllerAnimated:YES]; 
} 
在viewWillAppear中方法

另外设置一样NO

[myButton setSelected: NO]; // Add this line 
+0

谢谢。在提交问题之前,我已经在此尝试将此作为搜索结果。它仍然没有工作。 – 2014-12-02 10:01:38