iOS 5.1 および iOS 5.0 では機能しますが、iOS 6.0 ではキーボードが表示されません。
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
UITextField *textField = self.emailAddressTextField;
[textField becomeFirstResponder];
}
今のところ、ロジックを に移動しました-viewDidAppear:
。
// This works but is not desirable.
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
UITextField *textField = self.emailAddressTextField;
[textField becomeFirstResponder];
}
これは機能しますが、望ましくありません。ビューがロードされた後、キーボードのスライドアップ アニメーションが表示されます。
左にスライドするアニメーションがナビゲーションコントローラーに読み込まれているビューを表示するので、キーボードを表示したいと思います。
ビューが iOS 6 に表示されるときにキーボードをロードする方法を知っている人はいますか?
アップデート
@Duck のフィードバックに基づいて、もう少しテストを行いました。これは、UITableViewCells に含まれる UITextFields に固有のようです。
誰か提案はありますか?
最初の解決策
だから完全な説明。これは、2 つの静的セル (電子メールとパスワード) を含むテーブル ビューです。テーブル フッター ビューが割り当てられたビューにログイン ボタンがあります。2 つのセルにはテキスト フィールドがあり、カスタム タイプの SICOTextFieldCell です。
私の解決策は、ログイン ボタンの後ろ (テーブル フッター ビュー) に偽のテキスト フィールドを配置することでした。
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
UITextField *textField = self.SICO_fakeTextField;
[textField becomeFirstResponder];
}
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
UITextField *textField = self.SICO_emailAddressTextField;
[textField becomeFirstResponder];
}
新しいソリューション
@stm の回答に基づいて、新しい (優れた?) ソリューションを思いつきました。
私の解決策は、電話することでした-selectRowAtIndexPath:animated:scrollPosition:
。-[SICOTextFieldCell setSelected:animated:]
カスタム テーブル ビュー セルである は、[self.textField becomeFirstResponder]
魔法のようにキーボードを正しく描画する呼び出しを行います。それはまだハックですが、よりクリーンなハックです。
@interface SICOLogInViewController ()
@property (readonly, nonatomic) UITextField *SICO_emailAddressTextField;
@property (readonly, nonatomic) UITextField *SICO_passwordTextField;
@end
@implementation SICOLogInViewController
- (IBAction)logIn
{
// Controller Details
}
#pragma mark Private
- (UITextField *)SICO_textFieldForRowAtIndexPath:(NSIndexPath *)indexPath
{
SICOTextFieldCell *cell = (SICOTextFieldCell *)[self.tableView cellForRowAtIndexPath:indexPath];
return cell.textField;
}
#pragma mark View lifecycle
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self.tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]
animated:NO scrollPosition:UITableViewScrollPositionTop];
}
#pragma mark UITextFieldDelegate
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
switch (textField.returnKeyType) {
case UIReturnKeyGo: [self logIn]; break;
case UIReturnKeyNext: [self.SICO_passwordTextField becomeFirstResponder]; break;
default: break;
}
return YES;
}
#pragma mark Properties
- (UITextField *)SICO_emailAddressTextField
{
return [self SICO_textFieldForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
}
- (UITextField *)SICO_passwordTextField
{
return [self SICO_textFieldForRowAtIndexPath:[NSIndexPath indexPathForRow:1 inSection:0]];
}
@end