在Xamarin iOS中调用绑定的Objective-C本机方法

时间:2016-08-30 12:06:26

标签: c# xamarin xamarin.ios

如果要在Xamarin中绑定Objective C方法,可以使用ExportAttribute覆盖它。

但是如何调用现在覆盖方法背后的本机代码?

覆盖UIButton的LayoutSublayersOfLayer原生方法的示例:

[Export("layoutSublayersOfLayer:")]
public void LayoutSublayersOfLayer(CALayer layer)
{
    // base.LayoutSublayersOfLayer() <-- Any way to do this for bindings?
}

如果不调用此方法的原生基础,UIButton将不会布局它的标题,也不会显示它的图像和内部内容。

任何帮助都非常感谢,因为整个互联网上都没有文档。

1 个答案:

答案 0 :(得分:0)

您想在自定义override LayoutSublayersOfLayer课程中UIButton并调用基本方法:

public class CustomButton : UIButton
{
    public CustomButton() { }

    public CustomButton(IntPtr handle) : base(handle) { }

    public CustomButton(NSObjectFlag t) : base(t) { }

    public override void LayoutSublayersOfLayer(CoreAnimation.CALayer layer)
    {
        base.LayoutSublayersOfLayer(layer);
    }
}

UIView班级:

[Export ("layoutSublayersOfLayer:"), CompilerGenerated]
public virtual void LayoutSublayersOfLayer (CALayer layer)
{
    UIApplication.EnsureUIThread ();
    if (layer == null) {
        throw new ArgumentNullException ("layer");
    }
    if (base.IsDirectBinding) {
        Messaging.void_objc_msgSend_IntPtr (base.Handle, Selector.GetHandle ("layoutSublayersOfLayer:"), layer.Handle);
    }
    else {
        Messaging.void_objc_msgSendSuper_IntPtr (base.SuperHandle, Selector.GetHandle ("layoutSublayersOfLayer:"), layer.Handle);
    }
}