2016-02-23 3 views
0

У меня есть следующий класс, который генерирует пользовательскую ячейку. Он работает очень хорошо. Однако у меня есть условие, когда мне нужно получить больше места для моей InfoLabel, чем это определено ниже. Я не мог справиться с этим?Настроить пользовательскую ячейку далее

public WeinerGeneralCellItem (NSString cellId, Short Weiner) : base  (UITableViewCellStyle.Default, cellId) 
    { 
     this.Weiner = Weiner; 

     weinerInfoLabel = new UILabel() { 
      TextColor = UIColor.FromRGB (0, 0, 0), 
      BackgroundColor = UIColor.Clear, 
      TextAlignment = UITextAlignment.Left, 
     }; 

     weinerInfo = new UITextField() { 
      TextColor = UIColor.FromRGB (0, 0, 0), 
      TextAlignment = UITextAlignment.Right, 
      BackgroundColor = UIColor.Clear, 
     }; 

     ContentView.Add (weinerInfoLabel); 
     ContentView.Add (weinerInfo); 
    } 

    public override void LayoutSubviews() 
    { 
     base.LayoutSubviews(); 
     weinerInfoLabel.Frame = new CGRect(20, ContentView.Bounds.Height/4, 200, 25); 
     weinerInfo.Frame = new CGRect(220, ContentView.Bounds.Height/4, 300, 25); 
    } 
} 

По ширине infolabel по умолчанию составляет 200, информация является 300, но для последней ячейки, я хочу infoLabel ширина 350, информация 150. Я попытался следующие, но это не сработало.

public override UITableViewCell GetCell (UITableView tableView, NSIndexPath indexPath) 
{ 
    if (indexPath.Row == 5) { 
     cell.weinerInfoLabel.Frame = new CGRect(20, 20, 350, 25); 
     cell.weinerInfo.Frame = new CGRect(350, 20, 150, 25); 
     cell.weinerInfoLabel.Text = "The value calculated from the server"; 
     cell.weinerInfo.Tag = 5; 
     cell.weinerInfo.Text = "155.00"; 
    } 
} 
+0

Вы используете другой идентификатор для 5-й ячейки? В противном случае механизм кэширования будет обрабатывать каждую ячейку одинаково. – Jason

+0

Вам нужно учитывать разницу в 'cellForRowAtIndexPath', потому что это метод, который знает о строках. Сама клетка этого не делает. Вы можете вызвать метод на объекте ячейки, чтобы он настроил себя из 'cellForRowAtIndexPath' – Paulw11

+0

Я назначаю тэг, как следует cell.winerinfo.Tag = 5 – hotspring

ответ

0

вот решение, в котором я оказался, работает. Я просто проверяю идентификатор tag перед настройкой рамки для соответствующей ячейки.

public override void LayoutSubviews() 
{ 
    base.LayoutSubviews(); 
    if (weinerInfo.Tag == 5) 
    { 
     weinerInfoLabel.Frame = new CGRect (20, ContentView.Bounds.Height/4, 350, 25); 
     weinerInfo.Frame = new CGRect (350, ContentView.Bounds.Height/4, 170, 25); 
    } 
    else 
    { 
     weinerInfoLabel.Frame = new CGRect(20, ContentView.Bounds.Height/4, 200, 25); 
     weinerInfo.Frame = new CGRect (220, ContentView.Bounds.Height/4, 300, 25); 
    } 
} 
Смежные вопросы