我有一个源自MT.D StringElement
的控件。可以使用空白/空Caption
创建元素,当用户将文本添加到其他控件时,该元素随后会更新。 Caption
是MT.D Element
类中的一个字段,并且设置它不会自动更新关联的控件。因此,为了尝试更新控件,我创建了一个更新基本字段的属性,然后尝试更新控件。
public new string Caption {
get {
return base.Caption;
}
set {
base.Caption = value;
var cell = GetActiveCell();
if (cell != null) {
cell.TextLabel.Text = value;
}
}
}
可悲的是,它没有使用新值更新UI。使用调试器我可以看到它正确设置新值但它没有显示文本。如果我使用非空白Caption
创建控件,则会正确显示。我使用类似的方法来更新控件的ImageView
,它可以正常工作。
private void SetUiState(){
var cell = this.GetActiveCell();
if (cell != null) {
var imgView = cell.ImageView;
if (imgView != null) {
imgView.Image = _isEnabled ? _enabledImage : _disabledImage;
}
cell.SelectionStyle = _isEnabled ? UITableViewCellSelectionStyle.Blue : UITableViewCellSelectionStyle.None;
}
}
知道为什么它不适用于单元格的TextLabel
?
答案 0 :(得分:3)
我之前见过这个,需要重新布置单元格,因为需要更改TextLabel的框架以适应文本的更改。
public class TestElement : StringElement
{
public TestElement() : base("")
{
}
public new string Caption {
get
{
return base.Caption;
}
set
{
base.Caption = value;
var cell = GetActiveCell();
if (cell != null)
{
cell.TextLabel.Text = value;
cell.SetNeedsLayout();
}
}
}
}
答案 1 :(得分:0)
除了@Greg Munn的回答之外,您还要确保为元素返回唯一的ID。目前你不是,因此当UITableView将一个与StringELement混合的TestElement单元格出列时,它将重用那些尚未准备好以它们的方式重用的单元格。