iOS按钮标题颜色不会改变

时间:2016-04-25 03:30:48

标签: ios swift xcode7

我正在使用以下代码动态创建UIButton,该代码按照指定的样式创建它。

let frame = CGRect(x: 10, y: 6, width: 60, height: 30 )    
let button = UIButton(frame: frame)
button.setTitleColor(UIColor.blackColor(), forState: UIControlState.Normal)
button.backgroundColor = UIColor.whiteColor()
button.addTarget(self, action: "filterByCategory:", forControlEvents: UIControlEvents.TouchUpInside)
self.categoryScrollView.addSubview(button)

使用此按钮,我想在点击时切换样式。 以下代码更改背景颜色,但不更改标题颜色。 知道为什么标题颜色不会改变吗?

func filterByCategory(sender:UIButton) {

    if sender.backgroundColor != UIColor.blackColor() {
        sender.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Selected)
        sender.backgroundColor = UIColor.blackColor()
    } else {
        sender.setTitleColor(UIColor.blackColor(), forState: UIControlState.Normal)
        sender.backgroundColor = UIColor.whiteColor()
    }

}

2 个答案:

答案 0 :(得分:11)

因为您的按钮在触摸后会转回/etc/hosts/,它会变为UIControlState.Normal,然后.Highlighted

你应该设置 .Normal

sender.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Selected)

或者,只需为所有状态设置它,因为你检查了颜色,如

sender.setTitleColor(UIColor.whiteColor(), forState: UIControlState. Normal)

*编辑:上方不起作用,可以使用sender.setTitleColor(UIColor.whiteColor(), forState: [.Normal,.Selected,.Highlighted])代替

NSAttributedString

答案 1 :(得分:0)

for swift 3

// convert Calendar to ZonedDateTime 
converted = DateTimeUtils.toInstant(currentdate)
                .atZone(ZoneId.of("America/Denver"))
                .withZoneSameLocal(ZoneOffset.UTC);
// converted is equals to 2017-07-03T11:34:34.508Z

// convert ZonedDateTime to Date (date will be 11:34 UTC)
Date d = DateTimeUtils.toDate(converted.toInstant());
Calendar c = DateTimeUtils.toGregorianCalendar(converted);

// to get a Date that corresponds to 11:34 in Denver
Date d = DateTimeUtils.toDate(converted.withZoneSameLocal(ZoneId.of("America/Denver")).toInstant());
Calendar c = DateTimeUtils.toGregorianCalendar(converted.withZoneSameLocal(ZoneId.of("America/Denver")));