将XIB加载到ViewController Xamarin中?

6
在Xamarin中,可以创建和从自定义XIB加载视图吗? 在Objective-C中,可以这样做:
self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
self.window.rootViewController = self.viewController;
1个回答

12

1 - 创建你的XIB文件(例如MyView)。

2 - 在与XIB文件相关的.cs文件中添加此静态创建方法:

partial class MyView : UIView
    {
        public MyView (IntPtr handle) : base (handle)
        {    
        }

        public static MyView Create()
        {    
            var arr = NSBundle.MainBundle.LoadNib ("MyView", null, null);
            var v = arr.GetItem<MyView>(0);

            return v;
        }
    }

3 - 将 MyView 添加到 ViewController 中:

public partial class ViewController : UIViewController
{
    MyView v;
    public ViewController (IntPtr handle) : base (handle)
    {
    }

    public override void ViewDidLoad ()
    {
        base.ViewDidLoad ();

        v = MyView.Create();
        v.Frame = View.Frame;
        View.AddSubview (v);
    }
}

你可以在这里阅读更多相关信息。


1
静态方法Create不是静态构造函数。 - Grigory
这里的想法是通过静态方法创建xib,而不是从静态构造函数创建。 - jzeferino
1
我知道。你写了Create方法是一个静态构造函数。但实际上它不是。从C#的角度来看,它只是一个普通的静态方法。 - Grigory
1
我在这里得到了“指定的转换无效”异常 var v = Runtime.GetNSObject<SomeView> (arr.ValueAt(0)); - T.Y. Kucuk
很奇怪,你能创建一个带有这个的 Github 仓库吗? - jzeferino
感谢您清晰的解释。Runtime.GetNSObject不再有定义了,可以用arr.GetItem<MyView>(0);代替。请更新答案。 - Morse

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接