- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个文本字段,我不想在其中使用前导空格。所以我实现了 textField(textField:shouldChangeCharactersInRange:replacementString:)
并阻止将文本更改为以空格开头的内容的尝试。这按预期工作。
不幸的是,这会弄乱 QuickType。每次我在一个空字段中按空格键,然后我的 textField 会忽略它,Quicktype 文本就会以这个空格为前缀。更清楚地说,QuickType 将插入的文本带有前缀,额外的空格不会显示在 QuickType 栏的 UI 中。
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
let currentText = textField.text as NSString
let proposedText = currentText.stringByReplacingCharactersInRange(range, withString: string)
if !proposedText.isEmpty {
let firstCharacterString = String(proposedText[proposedText.startIndex]) as NSString
if firstCharacterString.rangeOfCharacterFromSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()).location == 0 {
println("starts with whitespace \"\(proposedText)\"")
return false
}
}
return true
}
这里是一些日志记录,以查看当我按空格键 5 次,然后按 I'm
QuickType 建议时发生了什么:
starts with whitespace " " // pressing space key
starts with whitespace " "
starts with whitespace " "
starts with whitespace " "
starts with whitespace " "
starts with whitespace " I'm" // Inserted by QuickType after pressing the "I'm" suggestion
starts with whitespace " " // Inserted by QuickType as well
通过检查该委托(delegate)方法中的变量,我可以验证问题确实出在我从 UITextField 获得的替换字符串上。它已经包含以空格为前缀的建议。
有谁知道我该如何防止这种情况,或者我如何“重置”QuickType 建议?
解决方法是从多字符插入中删除空格,但首先我想看看我是否缺少一种以干净的方式处理问题的方法。
最佳答案
经过更多测试,我得出结论,这是一个错误。
首先,我认为 Keyboard 和 QuickType 与 UITextField 是分离的。但实际上并非如此。在填充的文本字段中更改光标的位置实际上会更改快速输入建议。所以 textField 实际上与 quicktype 通信。
所以我提交了一个错误。
Apple 漏洞:rdar://19250739
OpenRadar 的错误:5794406481264640
如果有人对解决方法感兴趣:
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
let currentText = textField.text as NSString
let proposedText = currentText.stringByReplacingCharactersInRange(range, withString: string)
if proposedText.hasPrefix(" ") {
// Don't allow space at beginning
println("Ignore text \"\(proposedText)\"")
// workaround
if textField.text == "" && countElements(string) > 1 {
// multi insert into empty field. probably from QuickType
// so we should strip whitespace and set new text directly
let trimmedString = proposedText.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())
println("Inserted \"\(trimmedString)\" with Quicktype. ")
textField.text = trimmedString
}
return false
}
return true
}
关于cocoa-touch - QuickType 预测会考虑应该被我的 UITextFieldDelegate 阻止的击键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27361566/
我很好奇如何使类符合 UITextFieldDelegate,过去我总是添加它以允许访问协议(protocol)中定义的方法。然而,最后一次我忘记添加它,后来才意识到它丢失了。我的问题是为什么它可以在
提供以下派生类: #import @interface NumberPadViewController : UIViewController { UIImage *numberPadDone
这是一个奇怪的问题,但我对如何解决这个问题感到困惑 - 我有一个具有自定义 UITableViewCells 的 UITableView 。每个 UITableViewCell 都有两个 UIText
我在 textfield 和使用 Storyboard行编码的代码之间建立了联系。当我这样做时,我忘记先把 UITextFieldDelegate 放在上面。当我尝试使用 eventTitle.tex
当我从 UITextField 字段中逐一删除字符时,委托(delegate)方法 textField:shouldChangeCharactersInRange:replacementString:
我想使用 https://github.com/intuit/AnimatedFormFieldTableViewCell在我的项目中,但我无法理解设置它的步骤。到目前为止,我已经从文件夹中拖出文件并
我有以下代码来防止用户在 UITextField 中输入多个句点 .,它工作正常,但我想对其他人做同样的事情两个 textField,如何做到这一点? 我尝试将 delegate 分配给多个字段,但它
我想实现 UITextFieldDelegate在与 UIViewController 分开的一个类中但是当我这样做时,我得到一个 EXC_BAD_ACCESS运行时异常。 那么为什么这样做: cla
我有一个UITextField我想使用正则表达式。我想使用 - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRan
我正在使用 iOS 5 并尝试将 TextField 与 UITextFieldDelegate 一起使用,它的工作方式与我想要的完全一样(但只是在第一个 View 中)。我不明白,为什么它在下一个
我对 swift 还很陌生,我无法理解以下情况。我正在尝试使用几个 UITextFieldDelegate 函数扩展 UIViewController 类... class ViewControlle
有没有一种方法可以检测 -[UITextFieldDelegate textFieldShouldReturn] 是由用户按下键盘上的“完成”键(或等效键)调用的,还是由程序调用调用的到 -[UITe
我和我的同事更喜欢用不同的方法来解决一项小任务。我们想知道社区的意见。 我们必须在编辑过程中处理 UITextField 的文本。 (文本应显示在 View 的标题中) 两种最简单的方法是: 1.注册
我在处理 UITextField 委托(delegate)时遇到这个错误: 找不到支持键盘 Wildcat-Landscape-QWERTY-Pad 类型 8 的键盘;使用 3673479387_Wi
我刚刚开始熟悉使用 XCTestCase 编写测试并探索其功能。我有一个简单的(如果设计的)应用程序,它加载一个带有按钮和文本字段的屏幕。选择文本字段时, View Controller 填充文本字段
在模拟器中选择文本字段时发生崩溃。调试器似乎没有告诉我任何有用的信息。 import UIKit class TextField: NSObject, UITextFieldDelegate {} 在
问题 在 UITextFieldDelegate 的 textField:shouldChangeCharactersInRange:replacementString 中,我们得到了 tf.text
我有 SequencedTextFields 协议(protocol),它包含文本字段序列。当用户点击键盘上的 Return 按钮时,当前文本字段应退出第一响应者,序列中的下一个文本字段应成为第一响应
我尝试在 UITextFieldDelegate 的函数中做一些检查,但我真的被卡住了。在一项检查中,我想验证用户是否尝试在 UITextfield 的前面插入空格并且不允许他这样做。在另一项检查中,
看来我对 UITextFieldDelegate 有问题。 我刚刚创建了一个响应 UITextFieldDelegate 协议(protocol)的 View Controller ,并轻松地将字段添
我是一名优秀的程序员,十分优秀!