UITextViewが編集中の場合はナビゲーションバーへDoneボタンを表示したい
UITextViewDelegate#textViewDidBeginEditing:とUITextViewDelegate#textViewDidEndEditing:の中で UINavigationItem#rightBarButtonItem(Leftでもいいけど)を差し替えればOK。
コードにはこんな感じ。
コントローラ内にフィールドを宣言したあと、InterfaceBuilder内でインスタンスをひもづけておく。また、MemoViewControllerをUITextViewのデリゲートも行っているのでそちらも忘れずに。
@interface MemoViewController : UIViewController <UITextViewDelegate> { IBOutlet UIBarButtonItem *newPageButton; IBOutlet UIBarButtonItem *editingDoneButton; IBOutlet UINavigationItem *navigationBar; ... }
あとは以下のようにtextViewDidBeginEditing:とtextViewDidEndEditing:にコードを記述してやるだけ。
@implementation MemoViewController ... - (void)textViewDidBeginEditing: (UITextView *)txtView { // 編集中はナビゲーションバーへDoneボタンを表示 navigationBar.rightBarButtonItem = editingDoneButton; ... } - (void)textViewDidEndEditing: (UITextView *)txtView { // 編集後はナビゲーションバーへ「+」ボタンを表示 navigationBar.rightBarButtonItem = newPageButton; ... }