2011-05-25 69 views
4

當用戶觸摸特定文本字段或文本視圖時,如何將完成按鈕添加到UINavigationbar?在UINavigationbar中添加完成按鈕

或者更好的方法是檢測鍵盤顯示時,然後顯示按鈕。

我想完成按鈕來關閉標準Notes應用程序中的鍵盤。

回答

6

你可以嘗試類似的措施:

- (void)textFieldDidBeginEditing:(UITextField *)textField 
{  
    UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone 
                       target:self 
                       action:@selector(doneEditing)]; 
    [[self navigationItem] setRightBarButtonItem:doneButton]; 
    [doneButton release]; 
} 

- (void)textViewDidBeginEditing:(UITextView *)textView 
{  
    UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone 
                       target:self 
                       action:@selector(doneEditing)]; 
    [[self navigationItem] setRightBarButtonItem:doneButton]; 
    [doneButton release]; 
} 

與以下自定義,只要你喜歡

- (void)doneEditing { 
    [[self view] endEditing:YES]; 
} 

然後刪除- (void)textFieldDidEndEditing:(UITextField *)textField,也是按鈕在- (void)textViewDidEndEditing:(UITextView *)textView

只記得設置代表!

+0

謝謝。我有一個textfield和一個textview。有沒有類似的代表textview? – jarryd 2011-05-25 22:39:41

+0

是的。查看文檔:http://developer.apple.com/library/ios/#documentation/uikit/reference/UITextViewDelegate_Protocol/Reference/UITextViewDelegate.html – PengOne 2011-05-25 22:41:00

2

你應該採用委託協議,因爲我相信你在那裏有優勢。你可以做到這一點 -

- (void)textViewDidBeginEditing:(UITextView *)textView { 
    UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone 
                       target:textView 
                       action:@selector(resignFirstResponder)]; 
    self.navigationItem.rightBarButtonItem = doneButton; 
    [doneButton release]; 
} 

但是,如果你要觀察通知,你不知道哪一個是第一響應者。當然,如果你只有一個對象需要擔心,這並不是什麼大問題。

相關問題