TextFieldがキーボードに隠されないようにする

TextFieldを全画面のUIScrollViewのscroll上に配置しておく。TextFieldDelegateに次のように書くとテキストフィールドが隠れない。

- (void)textFieldDidBeginEditing:(UITextField *)tf {
	NSInteger marginFromKeyboard = 10,keyboardHeight = 165;//interfaceOrientationによる

	CGRect tmpRect = tf.frame;
	if((tmpRect.origin.y + tmpRect.size.height + marginFromKeyboard + keyboardHeight) > scroll.frame.size.height){
		NSInteger yOffset;
		yOffset = keyboardHeight + marginFromKeyboard + tmpRect.origin.y + tmpRect.size.height - scroll.frame.size.height;
		[scroll setContentOffset:CGPointMake(0,yOffset) animated:YES];
	}
}

- (void)textFieldDidEndEditing:(UITextField *)tf {
	[scroll setContentOffset:CGPointMake(0,0) animated:YES];
}

UIによってはx方向のOffsetも変更したり、元のscrollViewのオフセットを記憶しておいてその値に戻す方がいいかもしれない。