【问题标题】:UITextField no longer reloads keyboardType after reloadInputViews call在 reloadInputViews 调用后 UITextField 不再重新加载keyboardType
【发布时间】:2014-07-03 06:23:33
【问题描述】:

在 iOS 7 中,我可以更改键盘类型,而它是 firstResponder(即时):

if (textField.text.length > 2) {

    textField.keyboardType = UIKeyboardTypeNumbersAndPunctuation;
}
else
{
    textField.keyboardType = UIKeyboardTypeDefault;
}

[textField reloadInputViews];

// (Omitting some efficiency stuff to keep example to bare bones)

这在 Xcode 6/iOS 8 下不再适用。文档主要反映了关于自定义键盘的更改。

使用辞职/成为第一响应者(仍在)工作:

[textField resignFirstResponder];

// Make keyboard change

[textField becomeFirstResponder];

但这只是感觉有点矫枉过正。拆墙重建,只为换一张图。

这里有一个相关的帖子: UITextView does not seem to implement reloadInputViews

但似乎解决方案(在评论中)是“显然将其声明为 UITextView 而不是 UIResponder 会影响它在运行时的行为......现在它可以工作了” p>

在我的情况下,它 UITextField,我尝试转换为 UITextView 以防万一。不行。

我会再次提到它在 iOS7 / Xcode5 下运行良好。

我真的不知道这是 Xcode 6 的“测试版”问题,还是 iOS 8 的设计更改。

【问题讨论】:

  • 我在 Xcode 6 beta 7 的 iOS8 中看到了同样的问题。
  • reloadInputViews 在运行在 XCode 5.1.1 中创建的应用程序的 iOS8(在设备上)下无法执行任何操作。在 iOS7 中运行良好。
  • 直到 iOS 8.1 才解决问题

标签: ios8 xcode6


【解决方案1】:

我发现了同样的问题。最好检查一下textField是否已经是firstResponder。

[textField reloadInputViews]; // does not work on iOS8 !

if ([textField isFirstResponder]) {
    [textField resignFirstResponder];
    [textField becomeFirstResponder];
}

虽然不是一个干净的方法,但它有效。

【讨论】:

  • @bauerMusic:这个答案解决了一个现实问题。你做了什么?
  • @adnan:感谢您对这个 iOS 错误/更改的简洁解决方案
  • @bauerMusic,我明白你的意思。但事实是在 iOS8 上它不能正常工作。我的解决方案基于数小时的试用,因为我需要它不惜一切代价工作!它只是工作。我不明白是什么问题? !!
  • @adnan 你没看到我原来的问题中有这个“解决方案”吗?引用(来自我原来的问题):“使用辞职/成为第一响应者(仍在)工作......但感觉就像是一种矫枉过正。”。我的问题是是否有另一种方式。正如我所说,我已经知道你的建议,我写了它是为了让别人不会重复它(就像你刚刚做的那样)。 此外,(正如我所说)不需要检查textField 是否是firstResponer,它是。我问如何在没有resignFirstResponder 的情况下执行此操作,而您的答案是使用resignFirstResponder。好的,谢谢。
【解决方案2】:

我发现当文本字段是第一响应者时这有效:

[self.textField reloadInputViews];
[self.textField setText:@" "];
[self.textField setText:@""];

【讨论】:

  • 实际上,有记载:“第一响应者可以通过调用 UIResponder 的 reloadInputViews 方法重新加载输入和附件视图。” - developer.apple.com/library/ios/documentation/StringsTextFonts/…
  • 虽然上面的两个答案都是一种黑客,但我发现这个解决了我的问题:[self.textField reloadInputViews]; NSString *originalText = self.textField.text; [self.textField setText: [NSString stringWithFormat:@"%@%@", originalText, @" "]]; [self.textField setText:originalText];谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-11
  • 1970-01-01
  • 1970-01-01
  • 2013-09-11
  • 1970-01-01
相关资源
最近更新 更多