【问题标题】:Setting rightview on subclass of UITextField after initialization初始化后在 UITextField 的子类上设置 rightview
【发布时间】:2016-09-29 08:14:38
【问题描述】:

我尝试在 UITextField 初始化后设置rightView,但它得到了nil。这是我的课:

class MyTextField: UITextField, UIGestureRecognizerDelegate {  
    public required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        prepare()
    }

    public override init(frame: CGRect) {
        super.init(frame: frame)
        prepare()
    }

    public convenience init() {
        self.init(frame: .zero)
    }

    open private(set) var errorUIImageView = UIImageView(image: (resourceName: "ic_error_red"))

    open func prepare() {
        print("prepare")
        let tap = UITapGestureRecognizer(target: self, action: Selector(("handleTap:")))
        tap.numberOfTapsRequired = 1
        tap.delegate = self
        errorUIImageView.isUserInteractionEnabled = true
        errorUIImageView.addGestureRecognizer(tap)
        self.rightView = errorUIImageView // setting the rightView here
    }

    @IBInspectable
    open var detail: String? {
        get {
            return detailLabel.text
        }
        set(value) {
            detailLabel.text = value
            if let v: String = value {
                self.rightViewMode = .always

                if self.rightView == nil {
                    print("nil") // this line is reached!
                }
            }
            else {
                self.rightViewMode = .never;
            }
        }
    }

    @IBInspectable
    open var detailColor = UIColor.red {
        didSet {
            if let v: String = detailLabel.text {
                detailLabel.attributedText = NSAttributedString(string: v, attributes: [NSForegroundColorAttributeName: detailColor])
            }
        }
    }

    @IBInspectable
    open private(set) lazy var detailLabel = UILabel(frame: .zero)

    func handleTap(sender: UITapGestureRecognizer) {

        print("tapped")
    }
}

大部分代码取自Material

【问题讨论】:

  • 我试用了这段代码,它非常适合我。你确定你没有从其他地方将 rightView 设置为 nil 吗?
  • 也许您需要更新您的storyboard
  • @CarienvanZyl 是的,我确定。我将 self.rightView = errorUIImageView 移至 draw 方法,它正在工作。不过还是不知道是什么问题。
  • @Aerows 你能解释更多吗?我应该在情节提要中更新什么?
  • @CarienvanZyl 在下面查看我的答案。

标签: ios swift uitextfield


【解决方案1】:

如果您在interface builder 中首次显示您的实现后edited,您可能需要刷新所有视图。

【讨论】:

  • 'Refresh All Views' 在我的 Xcode 上被禁用(尝试选择很多东西但没有任何改变),但 Automatically Refresh Views 已启用。我尝试清理和重建,但没有成功。
猜你喜欢
  • 1970-01-01
  • 2013-10-22
  • 1970-01-01
  • 1970-01-01
  • 2014-02-20
  • 2013-07-27
  • 2017-10-26
  • 2013-03-13
  • 1970-01-01
相关资源
最近更新 更多