2009-12-28 1 views
0

У меня есть ячейка в виде таблицы, которая имеет UILabel в качестве поднабора, когда я устанавливаю текст метки, она никогда не отображается в ячейке. Я несколько нуб в развитии iPhone и я не уверен, что я делаю неправильно ...Подход UILabel в UITableViewCell не отображается. (iPhone Dev)

Я создаю и возвращающая следующую ячейку, на мой взгляд табличной cellForRowAtIndexPath делегата:

 

cell = [[[ActivityCell alloc] initWithFrame: 
    CGRectZero reuseIdentifier:ColumnedCell] autorelease]; 

CGRect frame = CGRectMake(180.0, 11.0, 130.0, 22); 

UILabel *valueField = [[UILabel alloc] initWithFrame:frame]; 
[valueField setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin]; 
valueField.tag = 111; 
valueField.textAlignment = UITextAlignmentRight; 
valueField.textColor = [UIColor colorFromHex:@"326799"]; 
valueField.highlightedTextColor = [UIColor whiteColor]; 
valueField.baselineAdjustment = UIBaselineAdjustmentAlignCenters; 
valueField.adjustsFontSizeToFitWidth = YES; 

[cell.contentView addSubview:valueField]; 
[valueField release]; 

cell.selectionStyle = UITableViewCellSelectionStyleNone; 

 

затем я хочу, чтобы установить UILabel (подвид) позже, делая это (я в настоящее время этот код в viewDidAppear):

 

ActivityCell *cell = (ActivityCell*)[formDetailsTableView cellForRowAtIndexPath: 
    [NSIndexPath indexPathForRow:0 inSection:1]]; 

UITextField *valueField = (UITextField *)[cell viewWithTag:111]; 
valueField.text = @"foo"; 
 

но слово «Foo» никогда не появляется в U ILabel. Я считаю, что он появляется при компиляции с < = 2.2 SDK, но я хочу, чтобы эта работа работала с 3.0+

Любые идеи о том, почему текст не отображается?

ПОСЛЕДУЮЩИЕ:

Пожалуйста, обратите внимание на этот вопрос, как следовать до этого: UITableViewCell's textLabel is overlapping a subview label, how can I fix it? (iPhone Dev)

ответ

0

Похоже, у вас есть небольшая ошибка:

изменения

UITextField *valueField = (UITextField *)[cell viewWithTag:111]; 

до

UITextField *valueField = (UITextField *)[cell.contentView viewWithTag:111]; 
+0

не повезло, то valueField.text выглядит он установлен (через NSLog), но он не отображается в окне просмотра. – mmattax

0

Я предполагаю, что возвратная ячейка равна нулю и, таким образом, не обновляет текст. Я хотел бы начать покупать убедившись, что вы получаете клетку назад от этой линии:

ActivityCell *cell = (ActivityCell*)[formDetailsTableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:1]]; 
+0

Ячейка не является нулевой ... – mmattax

2

Ну прежде всего, вы создаете UILabel, мечение как 111, а затем добавить его в качестве подвида к contentView клетки , Позже вы пытаетесь получить этот UILabel, но вы отбрасываете его на UITextField. Принципиально то, что вы здесь делаете, неверно.

Вот что я рекомендую делать:

  1. Посмотрите на руководство компании Apple для using Interface Builder to create cells. Это приведет к намного меньшему количеству кода, и вы сможете легко увидеть, что происходит, и не нужно будет добавлять Label/TextField программно.
  2. Вместо того, чтобы пытаться получить доступ к ячеям непосредственно в viewDidAppear и изменять их представления, вы должны делать всю эту логику отображения внутри cellForRowAtIndexPath. В другом способе (например, вызываемом, когда пользователь прикасается к кнопке), вы измените некоторую структуру данных, а затем отправите tableView сообщение reloadData. В это время cellForRowAtIndexPath вызывается снова, и значения, установленные в вашей структуре данных, определяют, как создается ячейка.
-1
cell = [[[ActivityCell alloc] initWithFrame: 
    CGRectZero reuseIdentifier:ColumnedCell] autorelease]; 


ваша клетка имеет рамку CGRectZero

+0

Кадр, который инициализируется ячейкой таблицы, обычно не имеет значения, поскольку UITableView управляет этим наряду с рядом других аспектов ячейки. Вероятно, поэтому назначенный инициализатор для 'UITableViewCell'-'-initWithStyle: reuseIdentifier: 'теперь полностью исключает параметр« frame ». –

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