UITextField が表示されているときはキーボードが正しく表示されますが、MFMailComposeViewController が表示されて閉じられた後に表示されないという問題があります。カーソルはテキストフィールドに表示されますが、キーボードは表示されません。
基本的に、ユーザーが「Create Preset」ボタンをタップすると、UITextField を含む現在のビューに UIView が追加されます。
[self.view addSubview:createPresetView];
[presetNameField becomeFirstResponder];
それはうまくいきます。ユーザーは複数の新しいプリセットを追加できます。ビューが追加されるたびに、テキスト フィールドがファーストレスポンダーになり、キーボードが表示されます。presetNameField がビュー階層にないという問題を除外するために、1 秒の遅延後に becomeFirstResponder を試してみましたが、結果は同じです。
次に、標準の MFMailComposeViewController を使用して、プリセットを電子メールで共有できます。
MFMailComposeViewController *mailView = [[MFMailComposeViewController alloc] init];
[mailView setMailComposeDelegate:appController];
[mailView setSubject:@"New preset"];
[mailView setMessageBody:@"\n\nMail from app" isHTML:NO];
[appController presentModalViewController:mailView animated:YES];
私が知る限り、メール作成ビューは正しく閉じます。
[controller.view endEditing:YES]; // I added this as a test to ensure the mail view resigns first responder, no difference.
[self dismissModalViewControllerAnimated:YES];
[controller release];
controller = nil;
ただし、[Create Preset] ボタンを押すと、ビューにテキスト フィールドが追加され、テキスト フィールドがファーストレスポンダとして設定されますが、キーボードが表示されません。
テキストフィールドで FirstResponder になったときに何が起こっているかを確認しました。テキストフィールド自体は有効で、canBecomeFirstResponder に YES を返します。
私が見つけた唯一の潜在的な手がかりは、[presetNameField becomeFirstResponder]が常にNO を返すことです (メール ビューが表示される前であっても)。
助言がありますか?