Obj C - 在触摸UIView时辞职第一响应者

时间:2011-04-11 15:29:26

标签: objective-c keyboard uitextview hide

触摸屏时,我正试图让键盘消失,这个问题在stackoverflow上得到了解决。由于这里有一个线程,当按下回车键时,我能够让键盘消失。我没有运气背景触摸辞职第一响应者。正在输入该方法,我在方法中有一个NSLog说“在backgroundTouched中”,但键盘仍在那里。

我试过让UIView成为一个UIControl类,所以我可以使用触摸事件。 journalComment是一个UITextView。

-(IBAction)backgroundTouched:(id)sender
    {
        [journalComment resignFirstResponder];
        NSLog(@ "in backgroundTouched");

}

我还试过在backGroundTouched方法调用的所有内容下都有一个隐形按钮。我想也许我在界面构建器中遗漏了一些东西,但我不确定是什么。

感谢您的帮助!

这适用于完成按钮:

-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range 
 replacementText:(NSString *)text
{
    // Any new character added is passed in as the "text" parameter
    if ([text isEqualToString:@"\n"]) {
        // Be sure to test for equality using the "isEqualToString" message
        [textView resignFirstResponder];

        // Return FALSE so that the final '\n' character doesn't get added
        return FALSE;
    }
    // For any other character return TRUE so that the text gets added to the view
    return TRUE;
}

2 个答案:

答案 0 :(得分:3)

我发现以下代码最适合我的文本视图(不是文本字段)而没有委托方法:

首先在视图上设置点击手势识别器:

- (void)viewDidLoad{

UITapGestureRecognizer* tapRecognizer = [[UITapGestureRecognizer alloc]
        initWithTarget:self
                action:@selector(tap:)];
    tapRecognizer.delegate = self;
    [self.view addGestureRecognizer:tapRecognizer];

}

然后在你的点击方法中:

- (void)tap:(id)sender
{
// use to make the view or any subview that is the first responder resign (optionally force)    
[[self view] endEditing:YES];
}

这应该允许您在视图中的任何位置解除键盘。

希望这有帮助

答案 1 :(得分:1)

试试这个。我们之前遇到过这个问题,但最终找到了正确的解决方案。

  -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{

        [yourtextfield resignFirstResponder];

        // you can have multiple textfields here


    }

这可以解决按下背景时键盘不会消失的问题。