swift - UITextField rightView 图像和按钮?

标签 swift uibutton uitextfield uitextfielddelegate

我在使用 UITextView 时遇到了 2 个问题。我有一个 UIViewController,它有 5 个 UITextFieldUITextField1UITextField2 始终可见,用户无法隐藏。如果用户点击按钮,它会添加(isHidden 属性设置为 false)最多 3 个 UITextFields

每个 UITextFields 都应显示为 .rightView 一个显示左侧字符的自定义 UILabel。除此之外,3 个额外的 UITextFields 还应该添加一个 .rightView 一个 UIButton,当它被点击时它应该为 textField 设置动画.isHidden = true 这样它就会产生删除 UITextField 的错觉。

问题

右 View 的删除 UIButton 不起作用(即不隐藏相应的 UITextField 我不知道为什么。现在当你点击删除 UIButton 它隐藏了奇怪的按钮本身

 func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {

    guard let text = textField.text else { return true }
    let newLength = text.count + string.count - range.length

    let rightView = UIView(frame: CGRect(x: 0, y: 0, width: 55, height: 25))
    let label = UILabel(frame: CGRect(x: 0, y: 0, width: 20, height: 20))
    label.font = UIFont(name: Fonts.OpenSans_Light, size: 14)

    if textField === thirdChoiceTextField || textField === forthChoiceTextField || textField === fifthChoiceTextField {
        let button = UIButton(frame: CGRect(x: rightView.frame.width - 30, y: 0, width: 25, height: 25))
        button.setBackgroundImage(UIImage(named: "icon_cancel_dark"), for: .normal)
        button.addTarget(self, action: #selector(self.hideTextField(textField:)), for: .touchUpInside)
        rightView.addSubview(button)
    }

    rightView.addSubview(label)
    textField.rightView = rightView
    textField.rightViewMode = .whileEditing
    label.textAlignment = .center

    if newLength <= 35 {
        label.text =  String(50 - newLength)
        label.textColor = .lightGray
    }
    else {
        label.text =  String(50 - newLength)
        label.textColor = UIColor.red
    }

    return newLength < 50
}


@objc func hideTextField(textField: UITextField) {
    if !textField.isHidden {
        UIView.animate(withDuration: 0.2) {
            textField.isHidden = true
        }
    }
}

最佳答案

func hideTextField(textField: UITextField)方法中,参数不能是UITextField,应该是UIButton本身,如下,

@objc func hideTextField(_ sender: UIButton) {
    ...
}

和下一行

button.addTarget(self, action: #selector(self.hideTextField(textField:)), for: .touchUpInside)

将更改为

button.addTarget(self, action: #selector(self.hideTextField(_:)), for: .touchUpInside)

现在你可以像下面那样应用动画了,

@objc func hideTextField(_ sender: UIButton) {
    if let  field = sender.superview?.superview as? UITextField, !field.isHidden {
        UIView.animate(withDuration: 0.2) {
            field.isHidden = true
        }
    }
 }

关于swift - UITextField rightView 图像和按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51122856/

相关文章:

ios - UIButton 将点击和滚动手势传递给 UIScrollView

objective-c - UI 设置代码在哪里?

ios - 点击按钮时显示 UIPickerView

ios - 动画 uicollectionviewcell,动画期间文本对齐偏离中心

ios - 自定义 Unwind Segue 在 Swift 中因 NSException 而崩溃

swift - 如何从 Swift 中的 UInt8 变量中获取 N 位?

ios - 如何检查众多特定的UITextField?

swift - 是否有内置的 Swift 函数在开头填充字符串?

objective-c - 如何使用 NSNumberFormatter 格式化 UITextField?

ios - 通过UITextView修改CoreData实体属性值