2013-03-25 3 views
1

Этот код должен нарисовать линию по ячейкам:addSubView не работает должным образом на UITableView

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"]; 
    if (nil==cell){ 
     cell = [[UITableViewCell alloc] 
           initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"]; 
    } 

    NSString *currentCourseName=[courseKeys objectAtIndex:[indexPath row]]; 
    [[cell textLabel] setText:currentCourseName]; 
    NSLog(currentCourseName); 
    CGSize size = [cell.textLabel.text sizeWithFont:cell.textLabel.font]; 
    CGFloat y = cell.contentView.frame.size.height/2; 

    UIView *line = [[UIView alloc] initWithFrame:CGRectMake(5,y,size.width, 3)]; 
    line.backgroundColor = [UIColor redColor]; 
    [cell.textLabel addSubview:line]; 

    return cell; 

} 

Но, кажется, я должен прокрутить его несколько раз, чтобы увидеть красные линии. enter image description here

ответ

1

Я думаю, что мнение, что ваш добавляете в том, что вместо того, чтобы добавить, что в вашем - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath mehod, попробуйте использовать концепцию пользовательских ячейки. Это решило эту проблему в моем UITableView.

Creating a custom Table View Cell programmatically

Custom Table View Cells in iPad Programming

+0

Это будет работать точно, но это всего лишь обходной путь. Способ обучения программированию - это понимание ошибок. – Sulthan

0
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"]; 
    if (nil==cell){ 
     cell = [[UITableViewCell alloc] 
           initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"]; 

    NSString *currentCourseName=[courseKeys objectAtIndex:[indexPath row]]; 
    [[cell textLabel] setText:currentCourseName]; 
    NSLog(currentCourseName); 
    CGSize size = [cell.textLabel.text sizeWithFont:cell.textLabel.font]; 
    CGFloat y = cell.contentView.frame.size.height/2; 

    UIView *line = [[UIView alloc] initWithFrame:CGRectMake(5,y,size.width, 3)]; 
    line.backgroundColor = [UIColor redColor]; 
    [cell.contentView addSubview:line]; 

    } 



    return cell; 

} 
+0

Нет видимых @interface для 'UILabel' объявляет селектор 'contentView:' – Maysam

+0

попробовать с [cell.contentView addSubview: линия] – iPatel

+0

где вы хотите поместить строку в UITableView ?? – iPatel

2

Я вижу две проблемы в вашем коде.

Первый

CGFloat y = cell.contentView.frame.size.height/2;

Что такое frame из contentView при создании ячейки? Если вы добавляете subview на метку, используйте высоту метки.

CGSize size = [cell.textLabel.text sizeWithFont:cell.textLabel.font]; 
UIView *line = [[UIView alloc] initWithFrame:CGRectMake(5, cell.textLabel.bounds.size.height/2.0f - 1.5f, size.width, 3)]; 
line.autoresizingMask = (UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin); 

Второй

[cell.textLabel addSubview:line];

Если клетка повторно, вы добавляете строки в клетках, когда уже линия. Проверите для textLabel subviews count first.

if (cell.textLabel.subviews.count == 0) { 
    [cell.textLabel addSubview:line]; 
} 
+0

Спасибо за ответ, для первого вопроса, это позиция y линии, не имеет значения. но вторая проблема, да, вы правы. – Maysam

+0

@ Майсам. Положение 'y', вероятно, действительно имеет значение. Что делать, если ваша строка находится за пределами метки, потому что ваш 'y' вычисляется неправильно? 'NSLog' ваши рамки просмотра, и вы найдете проблемы. Обратите внимание, что размер 'contentView' будет отличаться при создании ячейки и при повторном использовании ячейки. – Sulthan

+0

Я использовал ваш код, он все тот же – Maysam

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