2016-09-29 64 views
0

我尝试在初始化UITextField后设置rightView,但它获得nil。这里是我的类:在初始化后在UITextField的子类上设置rightview

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

+0

我试过这段代码,它对我来说很完美。你确定你没有在其他地方设置正确的视图吗? –

+0

也许你需要更新你的'故事板'? – Aerows

+0

@CarienvanZyl是的,我敢肯定。我将'self.rightView = errorUIImageView'移动到'draw'方法并且它正在工作。尽管如此,仍然不知道最新的问题。 –

回答

0

采取如果你显示它在interface builder后的第一次edited您的实现,您可能需要刷新所有视图。

enter image description here

+0

'刷新所有视图'在我的Xcode上被禁用(尝试选择很多东西并且没有改变),但是启用了“自动刷新视图”。我试图清洗和重建没有运气。 –