2017-07-27 41 views
0

我需要一些幫助。我在Windows 10的Visual Studio 2017中使用Xamarin IOS。我使用的是故事板,並且我有一個帶有2個視圖控制器的標籤欄控制器。我的視圖控制器是A_ViewController和B_ViewController。 我想要做的是點擊A_ViewController中的一個按鈕,它在後臺線程中調用API函數。該函數定期返回一些我希望在B_ViewController中的TextView中顯示的字符串。Xamarin,iOS從tabbarcontroller獲取viewcontroller的實例

我有API回調工作,可以接收返回的字符串,但我不知道我怎麼能得到B_ViewController的實例來更新TextView並顯示API返回字符串。

我知道tabbarcontroller有一個屬性,其中包含所有視圖控制器的實例,因爲我可以通過調用「this.TabBarController.SelectedIndex = 1;」來更改視圖控制器。但從A_ViewController中,我如何使用tabbarcontroller(或任何其他方式)來獲取B_ViewController的實例?

我試着從A_ViewController如下:

B_ViewController vc = this.TabBarController.ViewControllers[1] as B_ViewController; 
    vc.Output_Update("Hello World"); <--- This code creates an exception. 

我2個ViewControllers是這個樣子:

public partial class A_ViewController : UIViewController 
{ 
    public override void ViewDidLoad(){ 
     base.ViewDidLoad(); 
     mbtnCallAPI.TouchUpInside += BtnCallAPI_TouchUpInside; 
    } 

    public void BtnCallAPI_TouchUpInside(object sender, EventArgs e) { 
     // Call API here. API Callback will return strings 
     // Send return string to B_ViewController's TextView. 
    } 
} 



public partial class B_ViewController : UIViewController 
{ 
    public void Output_Update(string msg) { 
     mTextView.Text += msg; 
    } 
} 
+0

「此代碼創建一個異常」 - 什麼是特定異常? – Jason

+0

我得到一個空引用異常:對象引用未設置爲對象的一個​​實例。我期待看到如何從TabBarController獲取B_ViewController的實例。 – user2669496

回答

0

我認爲mTextView尚未建立。如果你現在嘗試設置文本,它會拋出一個NullReferenceException。

在我看來,這不是一個好的方法來使控制器相互依賴。例如A_ViewController不應該知道B_ViewController。取而代之的是將響應字符串保存在某處,並在B_Controller可見時更新文本視圖。

+0

mTextView只是B_ViewController中的一個視圖。它已經創建,因爲B_ViewController的ViewDidLoad()已經執行。我只是找不到從TabBarController引用B_ViewController實例的方法。我同意視圖控制器之間的緊密耦合並不是一個好的設計,但由於屏幕空間有限,我使用B_ViewController作爲A_ViewController的擴展,以顯示不適合一個VC的數據。 – user2669496

+0

如果不適合,爲什麼不使用UIScrollView? –

相關問題