我在 iOS 中有一个视图需要以两种模式显示,一种在导航标题中带有关闭按钮,另一种没有关闭按钮。我在我的视图模型中添加了一个布尔值来处理这个问题。但是, UIBarButtonItem 在我的视图模型中没有绑定到此布尔值的 Hidden 属性。关于如何解决这个问题的任何建议?注意:我不需要在运行时更改此关闭按钮的可见性。这只是在显示视图之前我需要的初始只读设置。
问问题
2193 次
2 回答
1
对于静态设置,您可以尝试检查 ViewDidLoad 代码中的 viewmodel 属性。
要创建自定义绑定,请参阅https://speakerdeck.com/cirrious/custom-bindings-in-mvvmcross
于 2013-05-24T19:55:43.867 回答
1
我有同样的问题,但需要动态改变可见性。我可以通过禁用按钮并将色调设置为清除来模仿可见性。
创建自定义 TargetBinding:
/// <summary>
/// Hides a UIBarButtonItem by disabling and setting the TintColor to Clear
/// </summary>
public class UIBarButtonItemVisibilityTargetBinding : MvxConvertingTargetBinding
{
protected UIBarButtonItem Button => base.Target as UIBarButtonItem;
private readonly UIColor _tintColor;
public UIBarButtonItemVisibilityTargetBinding(UIBarButtonItem button) : base(button)
{
this._tintColor = button.TintColor;
if (button == null) {
MvxBindingTrace.Trace(MvxTraceLevel.Error, "Error - UIBarButtonItem is null in UIBarButtonItemVisibilityTargetBinding");
}
}
public override MvxBindingMode DefaultMode => MvxBindingMode.OneWay;
public override System.Type TargetType => typeof(bool);
protected override void SetValueImpl(object target, object value)
{
var button = (UIBarButtonItem) target;
var enabled = (bool) value;
button.Enabled = enabled;
button.TintColor = enabled ? _tintColor : UIColor.Clear;
}
}
在设置文件中注册 TargetBinding:
protected override void FillTargetFactories (MvvmCross.Binding.Bindings.Target.Construction.IMvxTargetBindingFactoryRegistry registry)
{
base.FillTargetFactories (registry);
registry.RegisterCustomBindingFactory<UIBarButtonItem> ("Visibility", button => new UIBarButtonItemVisibilityTargetBinding (button));
}
使用自定义绑定绑定到视图控制器中的按钮:
set.Bind (btnBarItem).For("Visibility").To (vm => vm.ShowButton);
于 2016-03-30T04:50:25.593 回答