ios - 选择后如何获取文本按钮?

标签 ios swift uibutton

您好,我正在尝试获取按钮选择后的文本。 我这样做是为了使按钮的图像和文本居中。

我创建了一个函数来帮助我做到这一点。我想在选择按钮时调用它以再次呈现大小并再次居中取决于当前文本按钮。但是当我选择时,我没有得到任何文本变化。 有人知道我该怎么做吗?

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/

相关文章:

ios - UIPanGestureRecognizer 从不调用操作方法

objective-c - 将选择器添加到 NIB 文件中的多个分段控件

ios - 某些文件未显示在 Xcode 项目导航器中

ios - 使用 NSLayoutConstraints 设置自定义 UIButton 框架

cocoa-touch - 按下按钮时更改标签文本

ios - 自定义音效变量必须定义为属性?

ios - Storyboard AVCam View 大小调整问题

objective-c - CBPeripheral 名称有时为空

iOS - 如何在 UIAlertController swift 中的新行中添加操作

ios - iOS实现长时间后台任务的方法