通过点击文本字段进行导航
Posted
技术标签:
【中文标题】通过点击文本字段进行导航【英文标题】:Navigation by tap on textfield 【发布时间】:2018-09-25 12:41:23 【问题描述】:对于一个关于火车时间的项目,我想确保当我点击 UITextfield 时,我会转到一个表格视图。从这里我从列表中选择一个电台,然后他必须返回第一个视图,但他必须在相应的文本字段中填写电台。
如果有人能帮我解决这个问题,那就太好了。
提前致谢。
整个项目在MvvmCross,ios(Xamarin)中疯了
【问题讨论】:
【参考方案1】:我可能会听UITextFieldEditingDidBegin
找出 UITextField 是焦点。但是,开箱即用不支持此绑定。
然后你要做的是获取这个类:https://github.com/MvvmCross/MvvmCross/blob/develop/MvvmCross/Platforms/Ios/Binding/Target/MvxUITextFieldTextFocusTargetBinding.cs,它是UITextFieldEditingDidEnd
的绑定定义,只需将其更改为UITextFieldEditingDidBegin
,并让它在该事件触发时触发ICommand
。
这看起来像:
public class MvxUITextFieldEditingDidBeginTargetBinding : MvxTargetBinding
private IDisposable _subscription;
private ICommand _command;
protected UITextField TextField => Target as UITextField;
public override Type TargetType => typeof(ICommand);
public override MvxBindingMode DefaultMode => MvxBindingMode.OneWay;
public MvxUITextFieldEditingDidBeginTargetBinding(object target)
: base(target)
public override void SetValue(object value)
_command = value as ICommand;
public override void SubscribeToEvents()
var textField = TextField;
if (TextField == null) return;
_subscription = textField.WeakSubscribe(nameof(textField.EditingDidBegin), HandleEditingBegin);
private void HandleEditingBegin(object sender, EventArgs e)
if (_command == null) return;
if (!_command.CanExecute(null)) return;
_command.Execute(null);
protected override void Dispose(bool isDisposing)
base.Dispose(isDisposing);
if (!isDisposing) return;
_subscription?.Dispose();
_subscription = null;
然后您需要在FillTargetFactories
的Setup
类中注册它:
protected override void FillTargetFactories(IMvxTargetBindingFactoryRegistry registry)
base.FillTargetFactories(registry);
registry.RegisterCustomBindingFactory<UIControl>(
"EditingDidEnd",
view =>
new MvxUITextFieldEditingDidBeginTargetBinding(view));
这将允许您在绑定中绑定到EditingDidEnd
:
set.Bind(textField).For("EditingDidEnd").To(vm => vm.SomeCommand);
您可以在 MvvmCross 文档中阅读更多关于自定义绑定的信息:https://www.mvvmcross.com/documentation/advanced/custom-data-binding
【讨论】:
好的,想弄清楚。但是我需要在哪里放置 MvxUITextFieldEditingDidBeginTargetBinding 和 MvxUITextFieldTextFocusTargetBinding 类? VS 也找不到 FillTargetFactories?只是为了确保,我正在使用一个以类库为核心的单视图应用程序。 MvvmCross已经自带了FocusTarget绑定,所以你不需要放在任何地方,它只是作为我发布的类的参考。我发布的那个放在你的 iOS App Project 中,因为它包含 iOS View 代码。FillTargetFactories
是您在 Setup
类中覆盖的方法。以上是关于通过点击文本字段进行导航的主要内容,如果未能解决你的问题,请参考以下文章
添加/删除 UITableView 行时如何防止文本字段变空?
如何从 iOS 键盘扩展中检测到通过在 iMessage 中点击“发送”等操作清除了文本字段?