1

我已经把头撞在墙上一段时间了,但我仍然没有设法解决这个问题。

我有一个 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来获得我的具体解决方案。由于我使用导航控制器传递 modalVC,因此我需要在 UINavigationController 上创建一个类别并将您的方法添加到其中,以便它支持键盘的自动关闭。

4

2 回答 2

4

您可能正在使用UIModalPresentationFormSheet. 如果是,那么 iPad 上的一个功能就是不会关闭键盘。

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

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

于 2011-10-26T10:12:16.933 回答
0

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

这里有更多像其他答案一样的解决方案。

于 2011-10-26T10:11:57.283 回答