2016-10-02 3 views
0

Я хотел бы знать, когда мое приложение очистит свойство textTextField, которое является подклассом UITextField. Поскольку у меня много текстовых полей в моем приложении, я бы хотел, чтобы это был механизм из подкласса.Обнаружить, когда UITextField изменен не с помощью клавиатуры swift

Я нашел сообщения, которые предлагают использовать наблюдателя, и я попробовал его, и он работает, но мне бы хотелось, чтобы это было лучше.

Проблема этого метода состоит в том, что, когда я вхожу один символ с помощью клавиатуры, а затем очистить «Текст» из моего приложения с помощью

someField.text = "" 

наблюдатель называет мое приложение в 50 раз, что очень неэффективен.

Вот код, который я использую в MyTextField классе:

addObserver(self, forKeyPath: "text", options: .New, context: nil) 

и функция, которая получает сообщение

override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) { 
    if let newValue = change?[NSKeyValueChangeNewKey] { 
     print("text changed: \(newValue)") 
    } 
} 

Печать() вызывается более чем в 50 раз с «NEWVALUE» будучи пустым ech time. Кроме того, другие текстовые поля, которые не имеют данных в свойстве «text», вызываются 5 раз, когда я устанавливаю свое свойство «text» в «» из моего приложения, что также неэффективно.

ответ

0

Игнорировать мое сообщение. Я нашел свою проблему. Я добавляю «addObserver()« внутри »editRectForBounds(), думая, что он вызывается только один раз при инициализации, но выяснил, что это называется много раз, поэтому у меня было более 50« наблюдателей ». Как только я его исправил, приложение работает так, как ожидалось.

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