您好,我正在尝试获取按钮选择后的文本。 我这样做是为了使按钮的图像和文本居中。
我创建了一个函数来帮助我做到这一点。我想在选择按钮时调用它以再次呈现大小并再次居中取决于当前文本按钮。但是当我选择时,我没有得到任何文本变化。 有人知道我该怎么做吗?
override func viewDidLoad() {
super.viewDidLoad()
let button: UIButton = UIButton()
button.frame = CGRectMake(100, 100, 150, 60)
button.setImage(UIImage(named: "img"), forState: .Normal)
button.setImage(UIImage(named: "imgSelected"), forState: .Selected)
button.setTitle("Test", forState: .Normal)
button.setTitle("Prueba", forState: .Selected)
button.setTitleColor(UIColor.lightGrayColor(), forState: .Normal)
button.setTitleColor(UIColor.lightGrayColor(), forState: .Selected)
button.addTarget(self, action: #selector(HistoricalViewController.buttonAction(_:)), forControlEvents: UIControlEvents.TouchUpInside)
//Center the image with text
setupButton(button)
self.view.addSubview(button)
}
func buttonAction(sender:UIButton){
let button = sender as UIButton
if button.selected{
button.selected = false
}else{
button.selected = true
}
print("Current title \(button.currentTitle!)")
setupButton(button)
}
func setupButton(button: UIButton) {
let spacing: CGFloat = 6.0
let imageSize: CGSize = button.imageView!.image!.size
button.titleEdgeInsets = UIEdgeInsetsMake(0.0, -imageSize.width, -(imageSize.height + spacing), 0.0);
let labelString = NSString(string: button.titleLabel!.text!)
print("button title \(button.titleLabel!.text!)")
let titleSize = labelString.sizeWithAttributes([NSFontAttributeName: button.titleLabel!.font])
button.imageEdgeInsets = UIEdgeInsetsMake(-(titleSize.height + spacing), 0.0, 0.0, -titleSize.width);
}
已编辑:
我像这样更新了我的函数,以保持图像居中
func buttonAction(sender:UIButton){
let button = sender as UIButton
if button.selected{
button.selected = false
button.setTitle("Test", forState: UIControlState.Normal)
}else{
button.selected = true
button.setTitle("Prueba", forState: UIControlState.Normal)
}
setupButton(button)
}
和
func setupButton(button: UIButton) {
let spacing: CGFloat = 6.0
let imageSize: CGSize = button.imageView!.image!.size
button.titleEdgeInsets = UIEdgeInsetsMake(0.0, -imageSize.width, -(imageSize.height + spacing), 0.0);
let labelString = NSString(string: button.titleForState(button.selected ? .Selected : .Normal)!)
let titleSize = labelString.sizeWithAttributes([NSFontAttributeName: button.titleLabel!.font])
button.imageEdgeInsets = UIEdgeInsetsMake(-(titleSize.height + spacing), 0.0, 0.0, -titleSize.width);
}
最佳答案
在 setupButton 中,改变这个:
let labelString = NSString(string: button.titleForState(button.selected ? .Selected : .Normal)!)
关于ios - 选择后如何获取文本按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36074094/