私はしばらくの間壁に頭をぶつけてきましたが、それでもこの問題を解決することはできませんでした。
UITextField(myTroubleMakerと呼びましょう)と他のいくつかの重要でないコンポーネントを含むmodalViewControllerがあります。modalVCをロードするとき、UITextFieldを初期化し、それがすぐにfirstResponderになることを許可します。また、そのデリゲートをmodalVC(自己)に設定します。modalViewは、UITextFieldにフォーカスがあり、キーボードがすぐに開く状態でうまく読み込まれます。しかし、画面上の他の場所をタッチ/クリックしても、キーボードが閉じません。フォーカスをUITextFieldからオフに切り替え、firstResponderを辞任しますが、キーボードは閉じません。
この厄介な問題の原因は何ですか?どうすればこれを適切に修正できますか?
コード:
.h
@interface myModalViewController : UIViewController <UItextFieldDelegate>
{
UITextField *myTroubleMaker;
}
@property (nonatomic, retain) UITextField *myTroubleMaker;
@end
.m
//I synthesized it properly
-(void)loadView
{
[super loadView];
self.myTroubleMaker = [[UITextField alloc] initWithFrame:CGRectMake(0, 0, 300, 50)];
self.myTroubleMaker.backgroundColor = [UIColor clearColor];
self.myTroubleMaker.textColor = [UIColor whiteColor];
self.myTroubleMaker.text = @"";
self.myTroubleMaker.font = [UIFont systemFontOfSize:self.myTroubleMaker.frame.size.height - 8];
self.myTroubleMaker.adjustsFontSizeToFitWidth = YES;
self.myTroubleMaker.minimumFontSize = 0.0;
self.myTroubleMaker.textAlignment = UITextAlignmentCenter;
self.myTroubleMaker.autocorrectionType = UITextAutocorrectionTypeNo;
self.myTroubleMaker.delegate = self;
self.myTroubleMaker.placeholder = @"I eat ur brainz, yoh!";
self.myTroubleMaker.keyboardType = UIKeyboardTypeDefault;
self.myTroubleMaker.returnKeyType = UIReturnKeyDone;
[self.view addSubview:self.tabNameInputField];
[self.myTroubleMaker becomeFirstResponder];
}
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
self.tabNameInputField.text = @"";
return YES;
}
- (void)textFieldDidEndEditing:(UITextField *)textField
{
[textField resignFirstResponder];
}
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
[textField resignFirstResponder];
return YES;
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
{
UITouch *touch = [[event allTouches] anyObject];
if ([touch view] == someOtherModalVCComponent) {
//do stuff
if([self.tabNameInputField isFirstResponder])
{
[self.tabNameInputField resignFirstResponder];
}
[self loadGraphics];
}
if ([touch view] != self.myTroubleMaker)
{
if([self.myTroubleMaker isFirstResponder])
{
[self.myTroubleMaker resignFirstResponder];
}
}
}
キーボードに関するこの気の遠くなるような問題を除いて、それはすべて私が望むように機能しています。この質問を書いているときでさえ、私は可能な解決策について同様の問題をチェックしました。
どんな助けでもいただければ幸いです。ここで頭痛がします...
私が以下で受け入れた解決策によって解決されました。
今後の参考のために、 devforums.apple.com / message/425914を使用して特定のソリューションを入手しました。私はnavigationControllerでmodalVCを渡していたので、UINavigationControllerでカテゴリを作成し、それにメソッドを追加して、キーボードの自動解除をサポートする必要がありました。