2014-09-13 29 views
2

在Xamarin iOS Storyboard設計器中,ViewController的ViewDidLoad代碼在查看故事板時會自動生成並自動運行。這對編程設計元素非常有用,因爲我可以在設計器視圖中看到它們而無需啓動模擬器,但我還需要從ViewDidLoad進行API調用,並使錯誤導致設計人員崩潰「自定義組件未呈現,因爲問題被檢測到「在Xamarin iOS設計器中,如何防止代碼在ViewDidLoad中運行?

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

    AddWhiteGradient(); 
    AddGreenGradient(); 

    await CallApi(); 
} 

在這個例子中,我喜歡的設計師調用AddWhiteGradient()AddGreenGradient()功能,因爲我可以看到在故事板的結果,但等待CallApi()崩潰設計師。

是否有程序檢查以查看我是否處於設計器視圖中?

喜歡的東西之一:

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

#if !DESIGNER 
await CallApi(); 
#endif 
+0

這是一個非常好的問題! * common * .NET'DesignMode'映射不好(所以它不太可用)。如果它不存在(或者你找不到它),你應該在http://xamarin.uservoice.com/forums/144858-xamarin-product-suggestions – poupou 2014-09-13 17:12:11

+0

上詢問這個功能。謝謝@poupou,我只是做了那個http ://xamarin.uservoice.com/forums/144858-xamarin-product-suggestions/suggestions/6436439-add-a-way-to-check-if-in-studio-designer-view – 2014-09-14 16:55:06

回答

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(); 
    } 
} 
相關問題