我一直在墙上抨击我的头一段时间,但我还是没有设法解决这个问题。
我有一个modalViewController,上面有一个UITextField(我们称之为myTroubleMaker)和其他一些非重要的组件。当我加载modalVC时,我初始化UITextField并允许它立即成为firstResponder,我也将它的委托设置为modalVC(self)。 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上创建一个类别并将其添加到它,因此它支持自动解除键盘。
答案 0 :(得分:4)
您可能正在使用UIModalPresentationFormSheet
进行演示。
如果是,那么iPad上的一项功能是键盘不会被解雇。
在iOS4上有一个新方法disablesAutomaticKeyboardDismissal:
,如果你覆盖它以摆脱默认行为,可能对你有所帮助。
答案 1 :(得分:0)
一种选择是实现自定义UIButton并将其发送到根视图的后面。按下按钮,辞职第一响应者。
还有更多解决方案,例如其他答案。