【问题标题】:invoke textFieldShouldReturn with a custom keyboard使用自定义键盘调用 textFieldShouldReturn
【发布时间】:2013-02-22 00:15:38
【问题描述】:

我有一个自定义键盘,它设置了一个 UITextInput 委托,用于将文本发送到当前文本字段。但我还需要发送一个“返回”按钮来调用 textFieldShouldReturn 方法,据我所知, UITextInput 不允许这样做。 (除非返回键有某种特定字符?)

那么究竟如何将“return”按键值传递给文本字段以触发 textFieldShouldReturn?

【问题讨论】:

标签: iphone ios objective-c xcode ipad


【解决方案1】:

返回键的特定字符是\n 将其添加到字符串的末尾会将光标放在下一行...

*然后实际调用 textFieldShouldReturn 方法,如果您出于某种原因仍想这样做,您只需像调用任何方法一样调用它。

【讨论】:

  • 我想我说错了。我需要这个“返回”键来关闭键盘。这意味着它是调用 textFieldShouldReturn 方法的按键。就像您要正常关闭键盘一样。
  • 我很困惑...您有一个自定义键盘,并且您希望自定义键盘上的返回键在按下时隐藏键盘?
  • 是的。我有一个自定义键盘,当用户完成输入数据,或者他们想做其他事情时,我有一个“完成”按钮,他们可以按下以关闭键盘。问题是,基本上,我如何实现这一点,因为我目前只设置了一个 UITextInput 委托。
  • 所以您是说选择了 UITextField,但您的自定义键盘显示而不是内置键盘?因此,当您的自定义键盘“返回”时,只需取消选择当前 UITextField,然后使用此方法代替 - (void)textFieldDidEndEditing:(UITextField *)textField
  • 另外,你想通过调用textFieldShouldReturn 来完成什么?您是否要隐藏自定义键盘,因为有更好的方法可以做到这一点:)
【解决方案2】:

你应该实现这个:

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

【讨论】:

  • 用户正在使用自定义键盘。提问者想知道如何以编程方式调用此方法。
【解决方案3】:

您在这里走错了方向,因为您已经在使用自定义键盘。这应该使您无需使用 UITextFieldDelegate 来解决返回键检测问题。

textFieldShouldReturn:是 UITextField 的委托方法,用于检测用户何时按下返回键。如果您没有此方法,则必须使用 textField:shouldChangeCharactersInRange:replacementString: 来检测普通 UIKeyboard 中的换行符,这会很麻烦。

但是,如果您的键盘上有一个特定的按钮应该做一些特别的事情,只需将该按钮直接连接到您的 IBAction 方法。

所以是这样的:

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

- (IBAction)returnKeyPressed:(id)sender {
   // Do whatever you want done
}

如果您将自定义键连接到 returnKeyPressed:,则硬件键盘和虚拟自定义键盘都会以 returnKeyPressed: 结尾,并且行为将是一致的。

除了 UITextFieldDelegate 方法之外,您可能还想定义一个小协议来确保您的委托支持 returnKeyPressed:。

【讨论】:

  • 我在哪里实现 returnKeyPressed 方法?带有文本字段的视图?还是键盘的视图?我假设键盘的视图,然后将其委托给带有文本字段的视图?
  • @AlleyGator 这不是错误的方向。如果操作正确,无论是设置常规键盘还是自定义键盘,文本字段的工作方式都应该相同。这意味着视图控制器实现了通常的文本字段委托方法。视图控制器不需要知道正在使用自定义键盘。当然,这意味着必须正确实现自定义键盘,以便在敲击键时调用正确的委托方法。
  • @JesseDurham 如果它总是可以做与普通返回键相同的事情并且不需要特殊行为,那么您可以轻松地执行您提到的第二个选项。在键盘视图中实现该方法并使用文本字段委托给视图。我不得不猜测您的设计,但对于简单的情况应该没问题。
  • @rmaddy 我想。我不认为这是给定的,因为那时他可能必须响应 textFieldShouldReturn: 的 BOOL 值,并根据代表告诉他的内容手动将换行符插入到 textField 中。如果他不必担心这一点,那么这是一个很好的简化。
  • @AlleyGator 但无论textFieldShouldReturn: 返回什么,换行都不会插入到文本字段中。
猜你喜欢
  • 2011-05-06
  • 1970-01-01
  • 1970-01-01
  • 2018-01-30
  • 1970-01-01
  • 2017-04-09
  • 2012-10-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多