2014-12-02 70 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