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;
	...
}