2015-02-01 4 views
0

Я пытаюсь заставить UITextViewTextDidChangeNotification работать. Я новичок в использовании NSNotificationCenter, поэтому мне сложно понять, что происходит. У меня есть UITextView в раскадровке, и я создал IBOutlet для него в моем классе ViewController и назвал его textView.Swift NSNotificationCenter?

Это моя viewDidLoad функция:

override func viewDidLoad() { 
    super.viewDidLoad() 
    origin = self.view.frame.origin.y 

    if let field = textView{ 
     field.placeholder = placeholder 
     field.layer.cornerRadius = 8 
     field.layer.borderWidth = 0.5 
     field.layer.borderColor = UIColor.grayColor().CGColor 

     NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyPressed:"), name:UITextFieldTextDidChangeNotification, object: nil); 
    } 

    NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillShow:"), name:UIKeyboardWillShowNotification, object: nil); 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillHide:"), name:UIKeyboardWillHideNotification, object: nil); 
} 

Извещения клавиатуры отлично работают. Насколько я понимаю, они называют функцию с тем же именем, что и селектор. Это верно? Или здесь что-то происходит? Я сделал функцию под названием keyPressed, которая взяла NSNotification как параметр, но эта функция никогда не вызывалась, тогда как когда я включаю клавиатуру, вызываются функции keyboardWillShow и keyboardWillHide. Может кто-нибудь объяснить, что происходит?

+0

А вы что оператор if действительно выполняется? Я бы поставил println («Working») или что-то там, просто чтобы быть уверенным. – vegather

+0

Я отлаживал его, и я знаю, что он выполняется. Я все понял. Мне нужно было отправить уведомление ... – tdon

+0

В чем именно проблема, с которой вы сталкиваетесь? Также удалите редактирование решения. Если вы нашли решение, добавьте его в качестве ответа и примите свой ответ. Так работает Stack Overflow. – jww

ответ

0

Хорошо, поэтому я выяснил решение. Мне нужно было отправить уведомление в функции textViewDidChange. Я сделал это с помощью этого:

NSNotificationCenter.defaultCenter().postNotificationName("keyPressed", object: nil) 

Затем я узнал уведомление в моей функции viewDidLoad с этим:

NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyPressed:"), name:"keyPressed", object: nil); 

Тогда я сделал эту функцию в моей viewDidLoad функция:

func keyPressed(sender: NSNotification) { 

} 
+1

Не забудьте: NSNotificationCenter.defaultCenter(). RemoveObserver ... –

+0

О, хороший звонок. Будет ли это смотреть в ViewDidUnload? – tdon

+1

или вы можете сделать это в deinit. http://natashatherobot.com/ios8-where-to-remove-observer-for-nsnotification-in-swift/ –

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