2015-10-21 78 views
1

我對編程頗爲陌生,所以我希望這是一個非常簡單的錯誤。我在使用visual studio的xamarin ios應用程序中創建了一個UILabel,我想每30秒用新數據更新一次。我已經得到了它的更新,但不僅僅是我的標籤中的新號碼,我在我以前的號碼上獲得了新的號碼,但經過幾次運行後,它是不可讀的。我該如何製作,因此我只能在UILabe中獲得int的新價值?xamarin ios uilabel問題

我的代碼如下

int mytest = 0; 
    private async Task RefreshAsync() 
    { 
     while (0 == 0) 
     { 
      mytest++; 

      var t1label = new UILabel(new RectangleF(10, 10, 200, 100)); 
      t1label.Text = mytest.ToString(); 
      View.Add(t1label); 
      t1label.Font = UIFont.SystemFontOfSize(25); 
      await Task.Delay(30000); 

     } 
    } 
+0

我正面臨同樣的問題。 while循環之前,您必須初始化標籤。 –

回答

1

您在每次循環創建一個新的標籤,然後分層它在現有標籤的上面。相反,你應該只創建標籤一次,只更新它的值:

int mytest = 0; 

// create the label outside of the loop 
var t1label = new UILabel(new RectangleF(10, 10, 200, 100)); 
t1label.Text = mytest.ToString(); 
View.Add(t1label); 
t1label.Font = UIFont.SystemFontOfSize(25); 

private async Task RefreshAsync() 
{ 
    while (0 == 0) 
    { 
     mytest++; 

     t1label.Text = mytest.ToString(); 

     await Task.Delay(30000); 
    } 
} 
+0

我試圖按照上面的建議去做,但是當我這樣做時,我會遇到很多錯誤。主要是在var創建標籤時。它有錯誤「上下文關鍵字'var'可能只出現在局部變量聲明或腳本代碼中」我在這裏丟失了一些簡單的東西嗎?是否有可能創建一個公共標籤? – JSheller

+0

只是明確聲明它是標籤而不是使用var – Jason

+0

我希望這是我最後的問題:我如何將它添加到視圖? view.add(t1label)在這種情況下不起作用,因爲它不在類中。我非常感謝你的幫助!我得到的錯誤是「名稱'View.add'在當前上下文中不存在。」 – JSheller

2

您創建整個UILabel每次循環運行。這就是它出現在屏幕上多次的原因。

在循環外部創建標籤並僅刷新循環內的Text屬性。例如像這樣:

int mytest = 0; 
private async Task RefreshAsync() 
{ 
    var t1label = new UILabel(new RectangleF(10, 10, 200, 100));   
    View.Add(t1label); 
    t1label.Font = UIFont.SystemFontOfSize(25); 

    while (true) 
    { 
     t1label.Text = mytest.ToString(); 
     mytest++; 
     await Task.Delay(30000); 
    } 
} 

更多信息: 你被標籤的Text在不同的線程更新改變UI。這可能會導致問題。您應該始終在主線程上執行UI更新代碼。所以,最好是行

t1label.Text = mytest.ToString(); 

改變

InvokeOnMainThread(() => t1label.Text = mytest.ToString()); 

閱讀this以獲取更多信息。