2015-07-06 156 views
0

我已經自定義了我自己的按鈕。當我點擊它時,我想更改按鈕textcolor和邊框顏色。我用下面的代碼重寫的UIButton setHighlighted方法點擊後更改UIButton邊框顏色

if (highlighted) { 
    self.layer.borderColor = [[UIColor colorWithRed:0.447 green:0.443 blue:0.443 alpha:1.000] CGColor]; 
    self.titleLabel.textColor = [UIColor colorWithRed:0.447 green:0.443 blue:0.443 alpha:1.000]; 
} 
else{ 
    self.layer.borderColor = [[ UIColor whiteColor] CGColor]; 
    self.titleLabel.textColor = [UIColor whiteColor]; 
} 

然而,當我只需輕按按鈕就不會工作,當我做了按鈕的舉動會改變顏色。 我試圖創建斷點來檢查是否可以正確輸入此功能。我觀察到,只要點擊按鈕(由touchbegan事件觸發),這些代碼就會被執行一次,但當我繼續移動時會執行兩次(由touchbegan,touchmove事件觸發)。

我也嘗試添加該視圖級別的操作:

[downloadBtn addTarget:self action:@selector(allDownloadBtnClicked:) forControlEvents:UIControlEventTouchUpInside]; 
[downloadBtn addTarget:self action:@selector(allDownloadBtnHighlighted:) forControlEvents:UIControlEventTouchDown]; 

但它仍然不能作爲我的厚望操作。

任何人都可以給我任何建議來實現我的目標嗎?謝謝!

+0

你設置self.layer.borderWidth = 2.0F爲你的按鈕? – Maddy

+0

我已經在layoutSubviews中設置了borderWidth。 – kuokuo321

回答

0

試試這個。

- (instancetype)init 
{ 
    self = [super init]; 
    if (self) { 
     [self addCustomFeature]; 
    } 
    return self; 
} 

- (void)awakeFromNib 
{ 
    [super awakeFromNib]; 
    [self addCustomFeature]; 
} 

#pragma mark CustomizeUI 
- (void)addCustomFeature 
{ 
    // creating curved corners 
    [self.layer setCornerRadius:5]; 
    [self.layer setMasksToBounds:YES]; 

} 

- (void)setBorderColor:(UIColor *)borderColor 
{ 
    [self.layer setBorderWidth:1.0f]; 
    [self.layer setBorderColor:borderColor.CGColor]; 
} 

- (void) setHighlighted:(BOOL)highlighted { 
    [super setHighlighted:highlighted]; 
     if (highlighted) { 
      self.borderColor = [UIColor redColor]; 
     } 
     else { 
      self.borderColor = [UIColor greenColor]; 
     } 
} 
+0

我已經在layoutSubviews函數中設置了borderWidth。 而答案仍然無法正常工作。 – kuokuo321

+0

@ kuokuo321:你叫過超類方法嗎? –

+0

都在layoutSubviews和setHighlighted中,我先調用超類方法。 – kuokuo321

0

您可以更改所選標誌你觸摸的內心裏面方法:

- (void)allDownloadBtnClicked:(UIButton*)sender{ 
    sender.selected = !sender.selected; 
    ... 
} 

和重寫的setSelected功能,而不是

- (void) setSelected:(BOOL)selected{ 
    [super setSelected:selected]; 
    if (selected) { 
     self.layer.borderColor = [[UIColor colorWithRed:0.447 green:0.443 blue:0.443 alpha:1.000] CGColor]; 
     self.titleLabel.textColor = [UIColor colorWithRed:0.447 green:0.443 blue:0.443 alpha:1.000]; 
    } 
    else{ 
     self.layer.borderColor = [[ UIColor whiteColor] CGColor]; 
     self.titleLabel.textColor = [UIColor whiteColor]; 
    } 
} 
+0

我試過這種方法,但結果是它可以輸入此功能,但不能更改邊框顏色。順便說一句,我使用Xcode 6.4並連接到我的iPhone 6+以測試此功能。 – kuokuo321

+0

@ kuokuo321只有borderColor不起作用? textColor是否設置? – streem

+0

borderColor和textColor都不起作用。 – kuokuo321