【发布时间】:2013-04-01 14:58:56
【问题描述】:
UITextField如何禁用粘贴?
【问题讨论】:
-
这个答案是由PengOne PengOne在这个问题中给出的:*.com/questions/6701019/…
-
哦,对不起,以后不再重复这个问题。承诺。
标签: ios objective-c uitextfield
UITextField如何禁用粘贴?
【问题讨论】:
标签: ios objective-c uitextfield
覆盖canPerformAction:withSender: 方法以返回NO 用于您不想允许的操作:
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
if (action == @selector(paste:))
return NO;
if (action == @selector(select:))
return NO;
if (action == @selector(selectAll:))
return NO;
return [super canPerformAction:action withSender:sender];
}
在上面的代码中,您只需要为 paste 编写
另一种方式
-(BOOL)canPerformAction:(SEL)action withSender:(id)sender {
UIMenuController *menuController = [UIMenuController sharedMenuController];
if (menuController) {
[UIMenuController sharedMenuController].menuVisible = NO;
}
return NO;
}
同时检查This link
已编辑
在 iOS 7 中,你可以这样做,,,
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender {
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
[[UIMenuController sharedMenuController] setMenuVisible:NO animated:NO];
}];
return [super canPerformAction:action withSender:sender];
}
对于 Swift 用户
override public func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
if action == #selector(copy(_:)) || action == #selector(paste(_:)) {
return false
}
return true
}
如果您想在 TEXTFIELD 上打开日期选择器或选择器视图,请单击下面的代码。
在您的类中添加以下两个方法。
//Hide Menu View
override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
if YOURTEXTFIELD.isFirstResponder {
DispatchQueue.main.async(execute: {
(sender as? UIMenuController)?.setMenuVisible(false, animated: false)
})
return false
}
return super.canPerformAction(action, withSender: sender)
}
//必须实现
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
return false
}
【讨论】: