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

标签 c# xamarin.ios storyboard xamarin

在 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/

相关文章:

c# - 使用 AvalonEdit 显示无效的 XML 语法

C# 文件比较实用程序

c# - 查询在 SQL Server 2005 中有效,但在 SQL Server 2000 中出现语法错误

iphone - 检测耳机拔出 - Monotouch

iOS 通用 Storyboard iPhone iPad

ios - 如何在 UIScrollView 中正确放置不可滚动的 UITableView?

ios - 在 UIViewController 中添加 Storyboard 作为 subview

c# - 在 C# 上使用代理中继 HTTPS 请求

xamarin.ios - 下载 Xamarin Forms 中的取消延迟

iphone - 通过 SSL (https) + basicHttpBinding 使用 Monotouch 使用 WCF 服务