在 Xamarin iOS Storyboard设计器中,ViewController 的 ViewDidLoad 代码会在查看 Storyboard时自动构建和运行。这对于编程设计元素非常有用,因为我可以在设计器 View 中看到它们而无需启动模拟器,但我还需要从 ViewDidLoad 进行 API 调用,这会使设计器崩溃并出现错误 “自定义组件未被因为检测到问题而呈现”。
public async override void ViewDidLoad()
{
base.ViewDidLoad();
AddWhiteGradient();
AddGreenGradient();
await CallApi();
}
在这个例子中,我喜欢设计师调用 AddWhiteGradient() 和 AddGreenGradient() 函数,因为我可以在 Storyboard 中看到结果,但是 await CallApi() 使设计器崩溃。
是否有程序检查我是否在设计器 View 中?
类似的东西:
if (!IsInDesignerView) {
await CallApi();
}
或
#if !DESIGNER
await CallApi();
#endif
最佳答案
我创建了一个有效的 hack,所以我不会将其标记为答案,因为这不是 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;
}
}
View Controller
public async override ViewDidLoad()
{
base.ViewDidLoad();
if (!AppDelegate.IsInDesignerView)
{
await CallApi();
}
}
关于c# - 在 Xamarin iOS 设计器中,如何防止代码在 ViewDidLoad 中运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25825424/