2012-07-16 96 views
1

我在UITextView上查看底部的註釋。從頁面底部開始,每當有人編輯它時,都會調用一個方法來移動頁面的視圖,以便您仍然可以看到評論框。我的問題是,當用戶正在編輯UITextFields時,同樣的方法也會被調用。在UITextView上調用UIKeyboard方法,而不是在UITextFields上調用

這是我的。首先我宣佈一個通知:

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(keyboardWillShow:) 
              name:UIKeyboardWillShowNotification 
              object:self.view.window]; 

然後,該方法本身

- (void)keyboardWillShow:(NSNotification *)notif{ 

... 

} 

我首先想到的是添加一個條件,檢查,看看如果對象是一個TextView,然後才執行代碼。但是由於我沒有將對象傳遞給方法,是否有告訴方法我正在處理的對象類型

回答

1

文本字段和文本視圖也會發送通知。在textFieldShouldBeginEditing和textViewShouldBeginEditing實現中,您可以設置一個標誌,您可以在執行keyboardWillShow方法時讀取該標誌 - 鍵盤通知在文本字段或文本視圖通知之後發送。

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { 
    self.sender = @"text field"; 
    return YES; 
} 


- (BOOL)textViewShouldBeginEditing:(UITextView *)textView { 
    self.sender = @"text view"; 
    return YES; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(keyboardWillShow:) 
               name:UIKeyboardWillShowNotification 
               object:self.view.window]; 

} 

- (void)keyboardWillShow:(NSNotification *)notif{ 
    NSLog(@"%@",self.sender); 
} 
+0

'self.sender'正在尋找一個變量類變量,而不是你傳遞給函數的參數。這是你的意圖嗎? – BloonsTowerDefence 2012-07-17 15:02:04

+0

我不確定你的意思。發件人(也許這是一個很差的選擇名稱),只是我在視圖控制器的.h文件中聲明的屬性。這不適合你嗎?我測試了它,它對我來說確實很好。 – rdelmar 2012-07-17 15:16:22

+0

textview一個不適合我...爲什麼你有參數作爲TextView的文本框(我已經嘗試過這兩種方式,但沒有運氣)。 – BloonsTowerDefence 2012-07-17 15:35:29

相關問題