【问题标题】:How to get keyboard with Next, Previous and Done Button?如何使用 Next、Previous 和 Done 按钮获取键盘?
【发布时间】:2011-08-01 07:09:07
【问题描述】:

我想要一个上面有 Next、Previous 和 Done 按钮的键盘。

我在很多应用中都看到了这一点。

尤其是需要填写表格的地方。

我想实现类似于上面键盘的东西

我怎样才能得到它?

【问题讨论】:

    标签: iphone cocoa-touch ios4 iphone-keypad


    【解决方案1】:

    您将在this other post 上找到答案。 我检查了 iOS 库,UITextField 的 inputAccessoryView 正是您要找的!

    希望这会有所帮助!

    【讨论】:

    • 或者可以使用故事板来完成,例如here
    【解决方案2】:

    我刚刚创建了一个名为BSKeyboardControls 的类,它可以很容易地将控件添加到键盘。类、说明和示例代码可以在here at GitHub找到。

    这些控件适用于文本字段和文本视图,并针对 iPhone 和 iPad 进行了优化。

    【讨论】:

    • 刚刚发现 BSkeyboardControls 并喜欢它!需要它与 UIDatePicker 而不是文本字段一起使用。有任何示例代码吗?
    【解决方案3】:
    -(BOOL)textFieldShouldBeginEditing: (UITextField *)textField 
    
    {
         UIToolbar * keyboardToolBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 50)];
    
        keyboardToolBar.barStyle = UIBarStyleDefault;
        [keyboardToolBar setItems: [NSArray arrayWithObjects:
                                    [[UIBarButtonItem alloc]initWithTitle:@"Previous" style:UIBarButtonItemStyleBordered target:self action:@selector(previousTextField)],
    
                                    [[UIBarButtonItem alloc] initWithTitle:@"Next" style:UIBarButtonItemStyleBordered target:self action:@selector(nextTextField)],
                                    [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil],
                                    [[UIBarButtonItem alloc]initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(resignKeyboard)],
                                    nil]];
        textField.inputAccessoryView = keyboardToolBar;
    
    }
    
    
    
    - (void)nextTextField {
    
    
        if (textField1) {
    
            [textField1 resignFirstResponder];
            [textField2 becomeFirstResponder];
    
        }
    
    }
    
    -(void)previousTextField
    {
    
        if (textField2) {
            [textField2 resignFirstResponder];
            [textField1 becomeFirstResponder];
        }
    
    
    }
    
    -(void)resignKeyboard {
    
        [textField1 resignFirstResponder];
        [textField2 resignFirstResponder];
    
    }
    

    【讨论】:

    • 感谢您的想法/概念...我只需要进行一些更改。
    • 我想要这个代码用于 9 个文本字段,所以我这样做 if (textField1) { [textField1 resignFirstResponder]; [textField2 成为FirstResponder]; 9 次为不同的文本字段,但它不工作,为什么?
    【解决方案4】:

    我有一个实用程序类,基本上可以为你做这件事。

    https://github.com/kalvish21/CustomKeyboard

    这个想法很简单。您必须添加一个带有栏按钮项目的附件工具栏。有一个委托定义了该按钮的作用。

    【讨论】:

      【解决方案5】:

      https://github.com/hackiftekhar/IQKeyboardManager

      这是迄今为止我见过的最好的键盘处理程序。管理文本输入的非常好的方法。

      它的一些功能 1) 零代码行

      2) 自动工作

      3) 不再有 UIScrollView

      4) 不再有子类

      5) 不再需要手动操作

      6) 不再有#imports

      【讨论】:

      【解决方案6】:

      这是一个直接放置在键盘上方的自定义控件。我认为可以使用 UIToolbar。

      在 textFields 的 firstResponder 周围的上一个和下一个传递,Done 将执行辞职以及隐藏工具栏。

      要匹配键盘动画,请查看我找到的 this code 或 SO:"What is the iPhone's default keyboard animation rate?"

      【讨论】:

      • 是的,我尝试了类似的操作,但是当我单击 TextBox 时,工具栏会立即出现,键盘会从下方出现,因此它看起来是单独的。它在显示时不同步。它看起来确实是分开的。我希望键盘和工具栏都应该从屏幕底部聚集在一起。我该怎么办?
      • 使用与键盘匹配的动画块。
      • 感谢您的意见。我是动画新手。如何使用与键盘匹配的动画块?
      【解决方案7】:

      我创建了一个repository,并实现了此功能,该功能可在 iPhone/iPad 上以所有方向运行且高度可定制。

      【讨论】:

        【解决方案8】:

        正如其他答案中所述,您正在寻找的是inputAccessoryView

        我想在这里添加一种替代方式,使用这个 cocoapods:

        吊舱'UITextField-Navigation'

        所有UITextFields 将有两个附加属性:nextTextFieldpreviousTextField。然后,您可以在 Interface Builder 中简单地连接 nextTextField,并自动为您添加上一个、下一个和完成按钮,所有功能,无需更多代码,无需子类化。

        您还可以根据需要自定义 UI、添加更多按钮等。

        【讨论】:

          猜你喜欢
          • 2014-02-13
          • 1970-01-01
          • 2015-03-14
          • 1970-01-01
          • 1970-01-01
          • 2013-12-12
          • 2013-11-25
          • 2017-04-28
          • 2017-02-21
          相关资源
          最近更新 更多