我正在使用以下代码动态创建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()
}
}
答案 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")));