10

我有一个UITextField只显示数值(0-9,.,-)。当用户选择文本字段的内容时,会出现一个带有“复制”、“粘贴”和“定义”的菜单。由于文本字段仅显示数值,我不希望出现“定义”选项。如何禁用字典中的“定义”选项UITextField

编辑:我已经解决了这个问题并在下面发布了解决方案

4

4 回答 4

5

斯威夫特 - 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:
于 2015-07-29T13:43:40.970 回答
2

问题评论区的解决方案对我不起作用(ios8),我收到错误:

action == @selector(defineSelection:)

通过指定我想包含在菜单中的选项,我能够从编辑菜单中删除“定义”:

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender {
    if (action == @selector(copy:) ||
        action == @selector(selectAll:)) {
        return true;
    }

    return false;
}

更完整的答案:如何以编程方式禁用 UITextField 中的复制粘贴选项 (谢谢 serge-k)

于 2014-12-04T09:22:01.067 回答
-1

如果使用 NIB,请将 UITextField 的“Correction”属性设置为“NO”(默认值为 YES)。

如果使用代码,请将“autocorrectionType”设置为“UITextAutocorrectionTypeNO”。

于 2012-09-29T02:13:50.307 回答
-2

尝试这个:

UITextField* textField = //...;
textField.autocorrectionType = UITextAutocorrectionTypeNo;
于 2012-09-29T01:07:00.793 回答