2015-04-14 52 views
1

我在一個自定義的UITextView的初始化稱之爲:的UITextView UITextViewTextDidChangeNotification沒有呼籲文字的綱領性變化

[[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(textChanged:) 
               name:UITextViewTextDidChangeNotification 
               object:self]; 

的方法textChanged當我編程設置textView.text = @""

任何想法不叫我做錯了什麼?

+0

不需要觀察者使用[yourTextView addTarget:self action:@selector(textChanged :) forControlEvents:UIControlEventEditingChanged]; –

+0

爲什麼你使用通知而不是委託方法 –

+0

我必須在文本視圖中使用它以及它的超級視圖 –

回答

3

您不應該通過self到最後一個參數,這個參數是notificationSender,這意味着您只是想觀察由self發送的通知。

觀察這樣的:

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(textChanged:) 
             name:UITextViewTextDidChangeNotification 
             object:nil]; 

希望它可以幫助。

+1

有趣 - 我沒有意識到這一點 - 鏈接到更多顏色的文檔:https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSNotificationCenter_Class/index.html#//apple_ref/occ/instm/NSNotificationCenter/ addObserver:selector:name:object: – bdalziel

1

提到的委託模式@Prince的工作方式如下。在您的自定義的UITextView初始化:

[self setDelegate:self]; 

然後實現appropriate delegate method

#pragma - UITextViewDelegate 

- (void)textViewDidChange:(UITextView *)textView 
{ 
    // Move the body of textChanged here 
    // ... 
} 

這是管理應對變化中的親密/ 1,首選方式:1間的關係,在this excellent post概述。

+0

Nah,它只是意味着你不能在其他地方使用委託,就像你經常需要的那樣。對於像這樣的「低級別」更改,您只需使用通知。 – Fattie