禁用Xamarin表单输入字段上的复制/粘贴,即Entry

时间:2016-06-07 16:20:54

标签: xaml xamarin.forms

我正在禁用xamarin表单Entry上的复制/粘贴选项菜单,我可以使用 IsPassword = true 属性禁用复制选项,但此属性也会转换正常输入字段密码字段,这不是必需的。

<Entry IsPassword="true" Placeholder="Password" TextColor="Green" BackgroundColor="#2c3e50" />

提前致谢。

1 个答案:

答案 0 :(得分:7)

这与Forms的功能有关。在此处使用iOS作为示例,其他答案的Bugzilla问题中引用的CanPerform覆盖使用UIMenuController作为withSender,而不是UITextField本身可能使用的ViewRenderer<TView, TNativeView>覆盖预期。这是因为EntryRenderer类是TNativeView类型,随后在其UITextView中使用了CanPerform(在这种情况下,UIMenuController)。因为默认情况下不会覆盖任何内容,所以仍然可以看到UIMenuController.SharedMenuController.SetMenuVisible(false, false)中的所有剪切/复制/粘贴选项。

因此,会有几种选择。您可以先修改,如果您不想复制/粘贴,但可以摆脱其他所有内容,您可以在继承自EntryRenderer的自定义渲染器中使用ViewRenderer<TView, TNativeView>。如果你环顾四周,有类似的问题,这是一条可能的路线。

或者,你可以创建一个&#34; true&#34;自定义渲染器从ViewRenderer<Entry, YourNoCopyPasteUITextFieldClassName>继承为CanPerform。然后,继承自UITextField的类可以覆盖 public override bool CanPerform(Selector action, NSObject withSender) { if(action.Name == "paste:" || action.Name == "copy:" || action.Name == "cut:") return false; return base.CanPerform(action, withSender); } ,如下所示:

ViewRenderer<Entry, EditText>

这将需要更多的努力,因为自定义渲染器将不具有与EntryRenderer相同的行为,但由于Xamarin.Forms现在是开源的,您可以查看它以了解EntryRenderer如何正常运行的一些想法。可能必须为Android做类似的事情。

修改:对于Android,您可以使用此SO答案作为起点:How to disable copy/paste from/to EditText

另一个自定义渲染器,这次继承自class Callback : Java.Lang.Object, ActionMode.ICallback { public bool OnActionItemClicked(ActionMode mode, IMenuItem item) { return false; } public bool OnCreateActionMode(ActionMode mode, IMenu menu) { return false; } public void OnDestroyActionMode(ActionMode mode) { } public bool OnPrepareActionMode(ActionMode mode, IMenu menu) { return false; } } ,并在其中创建一个类(以最基本的形式):

OnElementChanged

然后,在您的CustomSelectionActionModeCallback方法中,您可以设置本机控件和 protected override void OnElementChanged(ElementChangedEventArgs<Entry> e) { base.OnElementChanged(e); if (Control != null) { Control.CustomSelectionActionModeCallback = new Callback(); } } 值:

LongClickable

如果工具栏出现,执行以下操作似乎会禁用自定义条目上的所有复制/粘贴/剪切功能。但是,您仍然可以长时间点击以显示粘贴按钮,我已经找到了一个尚未找到答案但尚未将sorted设置为false的答案。如果我确实在这方面找到了其他任何内容,我一定要更新。