【问题标题】:Post UIKeyboardDidShowNotification manually手动发布 UIKeyboardDidShowNotification
【发布时间】:2014-11-28 09:36:42
【问题描述】:

因为键盘在出现时隐藏了文本字段,所以我为此实现了a solution。现在我还建立了用户点击键盘的下一个按钮并直接跳转到下一个文本字段(在字段之间切换)的可能性。

现在的问题是,如果我只使用becomeFirstResponder,视图不会滚动。键盘向上,但UIKeyboardDidShowNotification 未触发,因此视图不会向上滑动。

我可以伪造这样的通知,以便通知中心发送UIKeyboardDidShowNotification吗?

【问题讨论】:

    标签: ios uiscrollview uitextfield nsnotificationcenter uikeyboard


    【解决方案1】:

    另一个选择是为此使用两个很棒的库。 BSKeyboardControls 用于选项卡,TPKeyboardAvoiding 用于移动视图。

    如果您只想发送通知,我猜[[NSNotificationCenter defaultCenter] postNotificationName: UIKeyboardDidShowNotification object:self] 应该可以正常工作。

    【讨论】:

    • 感谢您提及这些库。问题是我需要一个 Monotouch 端口……我试图在你发布的时候发送通知,但我需要创建一个通知。此通知应与来自操作系统的通知相同。我不知道该怎么做。 UIKeyboardDidShowNotification 是 Monotouch 中的 NSString。您如何在此处创建通知?
    • 现在通知被触发。在我的方法keyboardWasShown 中,我需要userInfo 对象来获取键盘大小。手动发布通知会使userInfo 变为nil。这是什么原因?我可以做些什么来获得我的键盘大小?
    • 这是一个棘手的问题。也许在键盘第一次出现时保存尺寸?因此检查userInfo 是否为nil,如果不是,则保存大小,如果是,则使用存储的大小。这样,它会在键盘第一次出现时保存它,并在您手动发布通知时调用它。
    • 好的,这将是一种解决方法。谢谢你的想法。您还必须注意方向是否在此期间发生了变化,并在需要时切换值(高度/宽度)。但是,如果您这样做,如果之前打开过键盘,您的方法可能会起作用(对于我来说,这是真的,因为之前有一个文本字段,而这个字段需要从一开始就滚动)。但现在我会坚持我的解决方案。我给你学分,因为它更直接地回答了我的问题。
    【解决方案2】:

    解决方法很简单:

    1. resignFirstResponder
    2. becomeFirstResponder

    我只能提供 C# 的解决方案(这就是我先省略它的原因):

    private bool TextFieldShouldReturn (UITextField textfield)
    {
        if (textfield.Tag == 1) {
            UIResponder nextResponder = this.View.ViewWithTag (2);
            textfield.ResignFirstResponder ();
            nextResponder.BecomeFirstResponder ();
        } else if(textfield.Tag == 2){
            textfield.ResignFirstResponder ();
            loginButton.SendActionForControlEvents (UIControlEvent.TouchUpInside);
        } else {
            // Not found, so remove keyboard.
            textfield.ResignFirstResponder ();
        }
    
        return false; // We do not want UITextField to insert line-breaks.
    }
    

    我在每个文本字段上设置了一些标签。比我使用委托usernameText.ShouldReturn += TextFieldShouldReturn; 来调用我的方法TextFieldShouldReturn。此方法选择下一个文本字段。要跳转到下一个文本字段,您首先使用resignFirstResponder 关闭键盘并使用becomeFirstResponder 显示键盘。使用此代码,UIKeyboardDidShowNotification 的调用就像用户点击文本字段(= 模拟点击)一样。

    【讨论】:

    • 您需要添加一些关于如何使用这些点的说明。至少发布一个关于如何使用这些通知的示例。
    • 我更新了我的答案。对我来说,您如何使用该代码很清楚。现在我添加了更多代码(尽管在 C# 中),展示了如何使用发布的解决方案。
    • 您的回答被标记为低质量。现在它本身已经很完整了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多