UIButton在UITextField中更改文本

时间:2017-05-16 10:05:14

标签: ios swift uibutton uitextfield

我正在尝试添加"忘记密码"按钮作为我的文本字段的右视图。文本字段具有自定义样式,也应该应用于按钮,因此按钮必须位于文本字段内。

到目前为止我所拥有的是:

let forgotPasswordButton = UIButton()
forgotPasswordButton.setTitle("Forgot", for: .normal)
forgotPasswordButton.addTarget(self, action: #selector(forgotPassword), for: [.touchUpInside])

passwordTextField.rightView = forgotPasswordButton
passwordTextField.rightViewMode = .always

问题是,我的按钮是不可见的。经过一些谷歌搜索后,我意识到我应该将框架设置为按钮,而不是使用.zero进行初始化。但问题是按钮的标题是本地化的,因此具有不同的宽度。

如何解决此问题?

2 个答案:

答案 0 :(得分:1)

您应该从NSString方法大小获得大小:

// Create Label
let forgotPasswordButton = UIButton()
forgotPasswordButton.backgroundColor = .red

// Title and font
let title = "Forgot my wallet in the appartment"
let font = forgotPasswordButton.titleLabel?.font

// Set title
forgotPasswordButton.setTitle(title, for: .normal)

// Get size of title
let fontAttributes = [NSFontAttributeName: font]
let size = (title as NSString).size(attributes: fontAttributes)

// Set frame using found size
forgotPasswordButton.frame = CGRect(origin: .zero, size: size)

然后用你的大小做你的逻辑。

答案 1 :(得分:-2)

你可以创建一个基于UITextfield的自定义类,并覆盖这个选择器,如下所示:

```

override func rightViewRect(forBounds bounds: CGRect) -> CGRect {
        var rect = super.rightViewRect(forBounds: bounds);
        rect.size.width = rect.size.width*2;
        rect.size.height = rect.size.height*2;
        return rect;
    }

```
您可以通过这种方式根据需要自定义矩形;