2016-09-29 4 views
0

Я пытаюсь установить rightView после инициализации UITextField, но он получает nil. Вот мой класс:Настройка правого представления в подклассе UITextField после инициализации

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

Я попробовал этот код и он отлично работает для меня. Вы уверены, что вы не устанавливаете rightView на ноль из другого места? –

+0

Возможно, вам нужно обновить «раскадровку»? – Aerows

+0

@CarienvanZyl Да, я уверен. Я перевел 'self.rightView = errorUIImageView' метод' draw', и он работает. Тем не менее, не знаю, в чем проблема. –

ответ

0

Если вы edited ваша реализация после показа его в первый раз в interface builder, вы, возможно, придется обновить все виды.

enter image description here

+0

«Обновить все представления» отключен на моем Xcode (пытался выбрать много вещей и ничего не изменилось), но включена функция «Автоматическое обновление просмотров». Я пробовал чистить и перестраивать, не повезло. –

Смежные вопросы