MonoTouch.Dialog:元素中文本的更新

时间:2011-12-13 21:32:26

标签: c# ios xamarin.ios monotouch.dialog

使用MonoTouch.Dialog我添加StyledStringElement元素。

有一个后台任务可以检索需要更新element.Value

的详细信息

有没有办法强制元素在element.Value更新后更新文本?

伊恩

3 个答案:

答案 0 :(得分:12)

如果你想逐个元素地更新这个元素,你可以使用类似的东西:

public class MyStyledStringElement {

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

一种变体是加载所有内容并更新一次(即每root.Reload次迭代Element)。

答案 1 :(得分: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 ();
        }
}

答案 2 :(得分: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);
};