【问题标题】:Hide keyboard on ViewWillAppear在 ViewWillAppear 上隐藏键盘
【发布时间】:2023-04-08 13:34:01
【问题描述】:

我有一个带有导航控制器和文本字段的屏幕。当我下一步移动并回来时,我希望键盘应该隐藏在第一个屏幕中。我在文本字段事件中隐藏键盘。

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    [textField resignFirstResponder];
    return NO;
}

但是如何在视图相关事件中做到这一点,以便每当我的视图出现时键盘被隐藏.. 请指导/帮助。 感谢您的建议。

【问题讨论】:

    标签: iphone ios objective-c


    【解决方案1】:

    如果您的UITextViewUITextField 未通过IBOutlet 连接,我认为这也是删除iOS App 中的键盘的好方法。

    如果您想使用 UIViewController 生命周期事件(例如 viewWillAppear 等)隐藏键盘,请遵循此

    -(void)viewWillAppear:(BOOL)animated    {
        [super viewWillAppear:animated];
        [[self view] endEditing:YES];
    }
    

    否则,如果您反对使用IBOutLet 连接,则此代码也可以按照您的描述正常工作。

    [yourTextField resignFirstResponder];
    

    【讨论】:

    • bit-whacker.. 我有 4 个文本字段并尝试了所有类似 [TF1 resignFirstResponder].. 仍然无法正常工作..
    • 使用 bit-whacker 提到的 viewWillAppear 方法代码,它将为您工作。
    • @Lalit_vicky 没有必要写[TF1 resignFirstResponder],因为它适用于您使用的每个UITextField。只写一行。 [[self view] endEditing:YES];
    • bit-whacker.. 我做到了。编辑模式下的任何字段意味着我必须选择任何 txt 字段。启用编辑..我只是从一个视图导航到另一个..
    • 也试过 [yourTextField resignFirstResponder];.. 是不是没有设置为 resignfirstresponder?
    【解决方案2】:

    将此代码添加到您的ViewWillAppear

    for(id obj in self.view.subviews)
        {
            if([obj isKindOfClass:[UITextField class]])
            {
                 [obj resignFirstResponder];
            }
        }
    

    这将包含该特定视图中的所有文本字段,这里是整个视图,并添加您之前编写的用于移除键盘的代码。

    【讨论】:

    • ironmangill..不走运。它只为滚动视图迭代。
    【解决方案3】:

    一个好习惯是将此代码写入屏幕的-viewWillDisappear。因此,当您从一个屏幕导航到另一个屏幕时,它将从该屏幕移除键盘。

    - (void)viewWillDisappear:(BOOL)animated
    {
        [self.view endEditing:YES];
        [super viewWillDisappear:animated];
    }
    

    对于多个文本字段,最好对特定视图使用-endEditing,而不是对任何单个文本字段使用-resignFirstResponder。看看我的Answer

    【讨论】:

    • 不走运的伙伴.. 我还添加了 [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil]; viewWillDisappear 里面是 tats 的问题
    • @Lalit_vicky:做一件事。将上面的代码写在-viewDidDisappear:而不是-viewWillDisappear
    • @Lalit_vicky :那么问题出在其他地方。这段代码应该可以工作。
    【解决方案4】:
    //This is for Swift
    override func viewWillAppear(animated: Bool)
    {
       self.view.endEditing(true)
    }
    

    【讨论】:

    【解决方案5】:

    您做错的事情是,当您将前一个控制器移回当前控制器时,由于前一个控制器的选定文本字段,键盘已启动。

    在当前控制器中代码:

    -(void)viewWillAppear:(BOOL)animated    {
        [super viewWillAppear:animated];
        [[self view] endEditing:YES];
    }
    

    它不会起作用,因为在这个控制器上没有选择文本字段。所以你需要做的是在之前的控制器 viewWillDisappear 方法中编写相同的代码,它肯定会解决你的问题。

    - (void)viewWillDisappear:(BOOL)animated
    {
        [self.view endEditing:YES];
        [super viewWillDisappear:animated];
    }
    

    【讨论】:

    • Anuj.. 我有 screen1 n screen2..m 从 screen2 移回 screen1。你的意思是添加screen2 ..?我试过了,但仍然发出退出问题..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-28
    • 2020-10-12
    • 2012-04-19
    • 2010-10-01
    • 2017-02-16
    • 2011-12-13
    • 1970-01-01
    相关资源
    最近更新 更多