禁用UITextField的编辑而不禁用子视图

时间:2018-01-23 06:46:37

标签: ios swift uibutton uitextfield custom-controls

我有UITextField,我在其左侧视图中放置了UIButton。我希望在UITextField响应点击操作时禁用UIButton的修改。我尝试了textField.isUserInteractionEnabledtextField.isEnabled,但他们都禁用了UIButton。有没有办法做到这一点?我的自定义UITextField类就像这样

import UIKit

@IBDesignable
class UITextFieldWithButton: UITextField, UITextFieldDelegate {


    private var happyButton: UIButton = UIButton(type: .system)

    @IBInspectable
    var buttonText: String {
        get {
            let string = happyButton.titleLabel!.text!
            let start = string.index(string.startIndex, offsetBy: 2)
            let end = string.endIndex
            return String(happyButton.titleLabel!.text![start..<end])
        }
        set {
            happyButton.setTitle("  " + newValue, for: .normal)
            happyButton.sizeToFit()
            self.leftView = happyButton
            self.leftViewMode = .always
        }
    }


    var isButtonEnable: Bool {
        get {
            return self.isButtonEnable
        }
        set {
            happyButton.isEnabled = newValue
        }
    }
    var buttonDelegate: UITextFieldWithButtonDelegate?

    required override init(frame: CGRect) {
        super.init(frame: frame)
        delegate = self
        happyButton.addTarget(self,action: #selector(pressButton(_:)), for: .touchUpInside)
        happyButton.titleLabel?.font = UIFont(name: (font?.fontName)!, size: (font?.pointSize)!)
    }

    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)!
        delegate = self
        happyButton.addTarget(self,action: #selector(pressButton(_:)), for: .touchUpInside)
        happyButton.titleLabel?.font = UIFont(name: (font?.fontName)!, size: (font?.pointSize)!)
    }

    @objc private func pressButton(_ sender: UIButton){
        if let click = buttonDelegate {
            click.clickOnUITextFieldButton(self)
        }
    }

}

protocol UITextFieldWithButtonDelegate {
    func clickOnUITextFieldButton(_ sender: UITextFieldWithButton)
}

1 个答案:

答案 0 :(得分:1)

“我尝试了textField.isUserInteractionEnabled以及textField.isEnabled,但它们都禁用了我的UIButton”:你的代码工作正常你可能在uitextfield后面添加了按钮尝试在视图层次结构中向前移动