2011-12-13 60 views

回答

12

如果您想更新此元素的元素,那麼你可以使用類似:

public class MyStyledStringElement { 

    public void SetValueAndUpdate (string value) 
    { 
     Value = value; 
     if (GetContainerTableView() != null) { 
      var root = GetImmediateRootElement(); 
      root.Reload (this, UITableViewRowAnimation.Fade); 
     } 
    } 
} 

的變化將是載入一切和更新一次(即迭代的root.ReloadElement)。

+0

如何以編程方式遍歷元素? – BRogers

+0

這不適用於我,Caption值不會更新。 我有一個非常特殊的情況下類似的問題。當我添加了元素後,我改變了標題屬性沒有更新「標題」標籤。爲什麼?,因爲元素只是在屏幕的底部,並不完全不可見控制器。所以,如果我向上滾動tableview使邊框元素可見,標題看起來不會更新。我必須拉下tableview才能使border元素完全不可見以強制更新。 – rolivares

+0

很難說沒有看到一些代碼(你應該創建問題並提供更多的數據)。事實上,它是正確的*當屏幕外是單元格被緩存(由iOS),所以在某些時候它們將被重用(用於其他事情),當你回到它們時,它不再是同一個單元了(它已經被重新創建最新值)。這很正常。 – poupou

1

我已經將「this.PrepareCell(cell)」添加到SetValueAndUpdate方法中並且可以工作,但我仍然認爲還有另一個更好的選項來檢測「caption」的變化並調用this.PrepareCell(cell); 。

public void UpdateCaption(string caption) { 
     this.Caption = caption; 
     Console.WriteLine ("actualizando : " + Caption); 
     UITableViewCell cell = this.GetActiveCell(); 
     if (cell != null) { 
      this.PrepareCell (cell); 
      cell.SetNeedsLayout(); 
     } 
} 
0

另一種方法來更新標籤是從StyledStringElementStringElement派生並直接在細胞內刷新DetailTextLabel:

class UpdateableStringElement : StringElement 
{ 
    public UpdateableStringElement(string name): base (name) 
    { 
    } 

    UILabel DetailText = null; 

    public void UpdateValue(string text) 
    { 
     Value = text; 
     if (DetailText != null) 
      DetailText.Text = text; 
    } 

    public override UITableViewCell GetCell(UITableView tv) 
    { 
     var cell = base.GetCell(tv); 
     DetailText = cell.DetailTextLabel; 
     return cell; 
    } 
} 

取而代之的Value屬性,您ç然後使用UpdateValue方法:

var element = new UpdateableStringElement("demo"); 

SomeEventOfYours += delegate { 
    element.UpdateValue(LocalizedValue); 
};