2013-02-09 2 views
1

У меня есть элемент управления, который получен из 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; 
     } 
    } 
} 

К сожалению, это не обновление пользовательского интерфейса с новым значением. Используя отладчик, я вижу, что он правильно устанавливает новое значение, но не отображает текст. Если я создаю элемент управления с не пустым Caption, тогда он будет отображаться правильно. Я использую аналогичный подход, чтобы обновитьуправления, который работает правильно.

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?

ответ

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(); 
      } 
     } 
    } 
} 
+0

Блестящий, отлично работающий спасибо. –

0

В дополнение к ответу от @Greg Munn вы хотите, чтобы вы вернули уникальный идентификатор для своего элемента. В настоящее время вы этого не делаете, поэтому, когда UITableView деактивирует ячейку TestElement, смешанную с StringELement, она будет повторно использовать ячейки, которые не были готовы к повторному использованию так, как они есть.

+0

Я не буду следовать за тобой. Этот уникальный идентификатор отличается от ключа, используемого при вызове 'DequeueReusableCell'? Возможно, ответ @Greg Munn создает впечатление, что это полный класс, но я только предоставил источник, имеющий отношение к моему вопросу. Фактический класс включает переопределение «GetCell()», которое предоставляет уникальный ключ. –

 Смежные вопросы

  • Нет связанных вопросов^_^