在 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

检测是不是在 UITextField 中输入了“空格”,并移动到下一个 UITextField

UITextField 在 iOS 7.1 上没有响应

如何禁用 UITextField 的选择?

占位符右对齐的 UITextField 不能正确向右移动

有啥方法可以禁用 UITextField 的听写支持?