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



在Xamarin iOS Storyboard设计器中,ViewController的ViewDidLoad代码会在查看故事板时自动生成并运行。这对于编程设计元素非常好,因为我可以在设计器视图中看到它们,而无需启动模拟器,但我还需要从ViewDidLoad调用API,这会使设计器崩溃,并返回错误"由于检测到问题,自定义组件未被呈现"

public async override void ViewDidLoad()
{
    base.ViewDidLoad();
    AddWhiteGradient();
    AddGreenGradient();
    await CallApi();
}

在本例中,我喜欢设计器调用AddWhiteGradient()AddGreenGradient(。

是否有程序检查来查看我是否在设计器视图中?

类似两者之一:

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

#if !DESIGNER
await CallApi();
#endif

我创建了一个有效的破解,所以我不会将其标记为答案,因为这不是Xamarin已经或将要提供的方式,但这目前可以完成任务。

Studio情节提要设计器不调用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();
    }
}

最新更新