在 UITextField 中禁用“定义”
Posted
技术标签:
【中文标题】在 UITextField 中禁用“定义”【英文标题】:Disabling "Define" in a UITextField 【发布时间】:2012-09-29 00:41:05 【问题描述】:我有一个UITextField
,它只显示数值(0-9、.、-)。当用户选择文本字段的内容时,会出现一个带有“复制”、“粘贴”和“定义”的菜单。由于文本字段仅显示数值,我不希望出现“定义”选项。如何禁用 UITextField
中的字典“定义”选项?
编辑: 我已经解决了这个问题并在下面发布了解决方案
【问题讨论】:
某事here? 我在那里找不到解决方案。有什么具体的吗? 我不明白为什么这个问题被“关闭为不是一个真正的问题”。无论如何,我找到了解决方案。子类化 UITextField 并覆盖“-(BOOL)canPerformAction:(SEL)action withSender:(id)sender”。通过向 if (action == @selector(defineSelection:)) 返回“NO”,从 UIMenuController 中删除了“define”选项 有些人如果不知道正确答案会关闭问题。 好像ios7的选择器是_define:
。我没有依赖特定的未记录选择器名称,而是使用了字符串比较:if ([[NSStringFromSelector(action) lowercaseString] rangeOfString:@"define"].location != NSNotFound) return NO; else return [super canPerformAction:action withSender:sender];
【参考方案1】:
Swift - iOS 8
您可以通过继承 UITextField 并覆盖 canPerformAction:WithSender
方法来做到这一点。
class MyTextFieldWithoutDefine: UITextField
override func canPerformAction(action: Selector, withSender sender: AnyObject?) -> Bool
if action == "_define:"
return false
return super.canPerformAction(action, withSender: sender)
所有动作列表:
cut:
copy:
select:
selectAll:
paste:
delete:
_promptForReplace:
_transliterateChinese:
_showTextStyleOptions:
_define:
_addShortcut:
_accessibilitySpeak:
_accessibilitySpeakLanguageSelection:
_accessibilityPauseSpeaking:
makeTextWritingDirectionRightToLeft:
makeTextWritingDirectionLeftToRight:
【讨论】:
非常感谢您列出所有可用的操作。使用 Obj-C 在 iOS 9.3 中测试【参考方案2】:问题评论区的解决方案对我不起作用(ios8),我收到错误:
action == @selector(defineSelection:)
我可以通过指定我想包含在菜单中的选项从编辑菜单中删除“定义”:
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
if (action == @selector(copy:) ||
action == @selector(selectAll:))
return true;
return false;
更完整的答案在:How to disable copy paste option from UITextField programmatically (谢谢 serge-k)
【讨论】:
【参考方案3】:如果您使用 NIB,请将 UITextField 的“Correction”属性设置为“NO”(默认值为 YES)。
如果使用代码,请将“autocorrectionType”设置为“UITextAutocorrectionTypeNO”。
【讨论】:
再次,在选择文本域的内容时,这不会阻止菜单中的“定义”。 span> 我认为你的问题不清楚,我们对你想要做什么有错误的想法......你不希望在长按单词后出现“定义”选项兴趣?在字典中执行查找的定义?【参考方案4】:试试这个:
UITextField* textField = //...;
textField.autocorrectionType = UITextAutocorrectionTypeNo;
【讨论】:
我将“更正”属性设置为“否”,并在代码中尝试了上述建议,但仍然得到“定义”菜单选项。 它在 xib 中。我还尝试了您的建议,并直接在代码中将 autocorrectionType 设置为 UITextAutocorrectionTypeNo。我用过: UITextField *unitValue = (UITextField *)[cell viewWithTag:1001]; unitValue.autocorrectionType = UITextAutocorrectionTypeNo;以上是关于在 UITextField 中禁用“定义”的主要内容,如果未能解决你的问题,请参考以下文章
将 UITextField 添加到 UITableViewCell