手动发布UIKeyboardDidShowNotification

时间:2014-11-28 09:36:43

标签: ios uiscrollview uitextfield nsnotificationcenter uikeyboard

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

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

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

2 个答案:

答案 0 :(得分:1)

解决方案很简单:

  1. resignFirstResponder
  2. becomeFirstResponder
  3. 我只能为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,就像用户点击文本字段(=模拟点击)一样。

答案 1 :(得分:1)

另一种选择是为此使用两个很棒的库。用于标签的BSKeyboardControls和用于移动视图的TPKeyboardAvoiding

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