TextFieldにテキストを入力したとき画面の下が隠れてしまわないようにする方法
TextFieldにテキストを入力するとき、キーボードが下からせりあがってきて画面が隠れてしまうことがあります。
かといってTextFieldを画面上部に持っていくとなるとレイアウトが崩れる・・・というときにはscrollViewを使います。
テキストを入力したときに自動的に画面が上にスクロールされて、入力が終わると元に戻ります。
サンプルを2つ用意しました。
これは通常のViewでやったものです。GitHub - prince9/scrollViewSample: (Sorry,Japanese only)TextFieldにテキストを入力したとき、画面の下が隠れてしまわないように画面をスクロールさせる
次にこれはTabbarでやったものです。コードに違いはありませんが、一応。
GitHub - prince9/TabscrollViewSample: (Sorry,Japanese only)Tabbarを使ってTextFieldにテキストを入力したとき、画面の下が隠れてしまわないように画面をスクロールさせる
コードは以下になります(Tabbarのバージョン)。
・FirstViewController.h
@interface FirstViewController : UIViewController { //以下追加 BOOL keyboardShown; CGPoint offset; } @property (weak, nonatomic) IBOutlet UIScrollView *myscrollView; @property (weak, nonatomic) IBOutlet UITextField *myField; @property (weak, nonatomic) IBOutlet UITextField *myField2; @property (weak, nonatomic) IBOutlet UILabel *myLabel; @property (weak, nonatomic) IBOutlet UILabel *myLabel2; - (IBAction)goText1:(id)sender; - (IBAction)goText2:(id)sender;
・FirstViewController.m
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. //追加、scrollViewのサイズを設定 self.myscrollView.contentSize = CGSizeMake(320, 411); [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardShow:) name:UIKeyboardDidShowNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardHide:) name:UIKeyboardDidHideNotification object:nil]; keyboardShown = NO; } //以下追加、UIKeyboardDidShowNotificationが送信されたときに実行される - (void)keyboardShow:(NSNotification *)notificatioin { if (keyboardShown) { return; } NSDictionary *info = [notificatioin userInfo]; //キーボードのサイズを取得、UIKeyboardFrameEndUserInfoKeyはiOS5以上のときに使う。iOS4.xの場合はここがUIKeyboardBoundsUserInfoKeyになる NSValue *keyboardValue = [info objectForKey:UIKeyboardFrameEndUserInfoKey]; CGSize keySize = [keyboardValue CGRectValue].size; offset = myscrollView.contentOffset; //scrollViewのサイズを変更 CGRect scrollViewFrame = myscrollView.frame; scrollViewFrame.size.height -= keySize.height; myscrollView.frame = scrollViewFrame; //スクロールする CGRect textFieldRect = myField.frame; textFieldRect.origin.y += 10; [myscrollView scrollRectToVisible:textFieldRect animated:YES]; keyboardShown = YES; } //以下追加、UIKeyboardDidHideNotificationが送信されたときに実行される - (void)keyboardHide:(NSNotification *)notificatioin { if (!keyboardShown) { return; } //scrollViewをもとに戻す myscrollView.frame = CGRectMake(0, 0, 320, 460); myscrollView.contentOffset = offset; keyboardShown = NO; } //テキスト表示 - (IBAction)goText1:(id)sender { myLabel.text = myField.text; } //テキスト表示 - (IBAction)goText2:(id)sender { myLabel2.text = myField2.text; }