在Xamarin iOS设计器中,如何防止代码在ViewDidLoad中运行?

时间:2014-09-13 16:48:03

标签: c# xamarin.ios storyboard xamarin

在Xamarin iOS Storyboard设计器中,ViewController的ViewDidLoad代码只需查看故事板即可自动构建和运行。这对于程序设计元素非常有用,因为我可以在设计器视图中看到它们而无需启动模拟器,但我还需要从ViewDidLoad进行API调用,并且使设计器崩溃并出现错误“自定义组件不是因为检测到问题而呈现“

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

    AddWhiteGradient();
    AddGreenGradient();

    await CallApi();
}

在这个例子中,我喜欢设计师调用 AddWhiteGradient() AddGreenGradient()函数,因为我可以在故事板中看到它的结果,但是等待CallApi()使设计师崩溃。

是否有程序化检查以确定我是否在设计师视图中?

之类的东西:

if (!IsInDesignerView) {
    await CallApi();
}

#if !DESIGNER
await CallApi();
#endif

1 个答案:

答案 0 :(得分:1)

我创建了一个有效的黑客,所以我不会将其标记为答案,因为它不是Xamarin提供或将提供的方式,但是现在这样做。

Studio Storyboard设计器不会调用AppDelegate事件,因此您可以利用它来创建支票。

<强> AppDelegate.cs

public partial class AppDelegate: UIApplicationDelegate
{
    public static bool IsInDesignerView = true;

    public override bool FinishedLaunching(UIApplication app, NSDictionary options)
    {
        IsInDesignerView = false;

        return true;
    }
}

<强>的ViewController

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

    if (!AppDelegate.IsInDesignerView)
    {
        await CallApi();
    }
}