UITextField没有辞职键盘

时间:2011-10-26 10:05:30

标签: objective-c keyboard uitextfield uitextfielddelegate resignfirstresponder

我一直在墙上抨击我的头一段时间,但我还是没有设法解决这个问题。

我有一个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上创建一个类别并将其添加到它,因此它支持自动解除键盘。

2 个答案:

答案 0 :(得分:4)

您可能正在使用UIModalPresentationFormSheet进行演示。 如果是,那么iPad上的一项功能是键盘不会被解雇。

在iOS4上有一个新方法disablesAutomaticKeyboardDismissal:,如果你覆盖它以摆脱默认行为,可能对你有所帮助。

http://developer.apple.com/library/ios/documentation/uikit/reference/UIViewController_Class/Reference/Reference.html#//apple_ref/occ/instm/UIViewController/disablesAutomaticKeyboardDismissal

答案 1 :(得分:0)

一种选择是实现自定义UIButton并将其发送到根视图的后面。按下按钮,辞职第一响应者。

还有更多解决方案,例如其他答案。