如何在某些情况下更改以编程方式创建的UIButton的标题和动作
问题描述:
我已经在我的ViewController上以编程方式创建了UIButton
。我想根据条件对同一个按钮执行不同的操作,并希望更改标题。如何在某些情况下更改以编程方式创建的UIButton的标题和动作
首先我创建按钮这样的:
func createButton(buttonTitle: String,buttonAction: Selector) -> UIButton{
let button = UIButton(type: UIButtonType.System) as UIButton
button.frame = CGRectMake(0, 0, 414, 65)
button.setTitle(buttonTitle, forState: UIControlState.Normal)
button.addTarget(self, action:buttonAction, forControlEvents: UIControlEvents.TouchUpInside)
button.setTitleColor(UIColor.whiteColor(), forState:UIControlState.Normal)
button.titleLabel?.font = UIFont(name: Variables.MONTESERRAT_REGULAR, size: 20.0)
button.backgroundColor = UIColor().blueColor() //top
button.titleEdgeInsets = UIEdgeInsetsMake(0.0,10.0, 10.0, 0.0)
return button
}
然后我显示这样
override func tableView(tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
let footerView = UIView(frame: CGRectMake(0, 0, tableView.frame.size.width, tableView.frame.size.height))
if(active == true){
bottomButton = createButton("UNPUBLISH", buttonAction: "unPublishToServer")
}else if(active == false){
bottomButton = createButton("PUBLISH", buttonAction: "publishToServer")
}else{
bottomButton = createButton("Request", buttonAction: "requestItem")
}
footerView.addSubview(bottomButton!)
return footerView
}
然后从服务器或条件的特定消息,我改变按钮这样
func publishTripToServer(){
dispatch_async(dispatch_get_main_queue()) {
self.bottomButton?.setTitle("UNPUBLISH", forState: UIControlState.Normal)
}
}
func unPublishTripToServer(){
dispatch_async(dispatch_get_main_queue()) {
self.bottomButton?.setTitle("PUBLISH", forState: UIControlState.Normal)
}
}
我遇到的问题是首先显示标题wh后面的一些背景颜色单击发布或取消发布。第二个问题是按钮不改变动作。
答
我不完全确定你是什么意思的背景颜色问题。
但是对于你的按钮,做这样的事情不行吗?
func publishTripToServer(){
self.bottomButton = createButton("UNPUBLISH", buttonAction: "unPublishToServer")
}
func unPublishTripToServer(){
self.bottomButton = createButton("PUBLISH", buttonAction: "publishToServer")
}
我不知道你为什么先前试图更新在后台线程按钮标题,但你不应该永远更新UI元素是异步的。
而且你的按钮动作并没有改变的原因是,你从来没有告诉它改变 - 你只是改变了标题
你的意思是,当我做我不应该删除微调或更改按钮上的异步调用但如果没有,那我该怎么做。我的意思是我不删除微调或更改后台线程上的按钮标题,那么我应该如何做到这一点? – user1hjgjhgjhggjhg
如果您只是更改按钮标题并显示或隐藏活动指示器,则没有理由应该在后台线程上。我不知道您的应用中还有什么,但您发布的内容都不需要在后台运行 – LulzCow