在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
答案 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();
}
}