UITableView中UILabel内部的单元格始终为null(两个单元格原型)

时间:2013-03-18 21:37:48

标签: ios ios5 ios6

我正在尝试在表视图中填充单元格(我有两个自定义类型的单元格,在storyboard中创建了不同的元素,标识符为“info_cell”和“person_cell”,在UITableView上方的分段控件上我决定加载什么[tableView重载])。当我尝试访问单元格内的UILabel时,我得到的标签为空。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSString *CellIdentifier = (viewType == INFO_VIEW) ? @"info_cell" :@"person_cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }
    if(viewType == INFO_VIEW){
        NSLog(@"INFO = %@", info_text_some_string);
        UILabel *lblInfo = (UILabel *)[cell viewWithTag:200];
        [lblInfo setText:info_text_some_string];
    }
    else{
        // there is part for person
    }
    return cell;
}

当我在表中只有一个原型单元格(UITableView在UIVewController中)时,相同的代码可以工作。这里有什么问题,我已经检查了100次:单元格标识符没问题,标签标签是200。

这是UISegmentControl

的操作
- (IBAction)changeView:(id)sender {
    UISegmentedControl *segmentedControl = (UISegmentedControl *) sender;
    NSInteger selectedSegment = segmentedControl.selectedSegmentIndex;

    if (selectedSegment == 0) {
        viewType = INFO_VIEW;
    }
    else{
        viewType = PERSON_VIEW;
    }
    [tableView reloadData];
}

我为tableView添加了必要的方法并连接了delegate i数据源。 有没有人知道为什么它是null?

3 个答案:

答案 0 :(得分:0)

尝试这个通常我按照这个过程每当我使用自定义单元格 CellRorRowAtIndexPath

   if(!cell)
    {
        cell =[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
        //customcell is your UITableViewCell created by you in ur xib
        NSData *archivedData =[NSKeyedArchiver archivedDataWithRootObject:customcell];
        cell =[NSKeyedUnarchiver unarchiveObjectWithData:archivedData];

    }
    if(viewType ==INFO_VIEW)
     {
    [(UILabel *)[cell viewWithTag:200] setText:@"you text"];
     }
  else{
        // person view....
      }

这样您就可以收集单元格的所有元素并为其设置值。请分享您的结果

答案 1 :(得分:0)

假设您正确地为UITableViewCells创建子类(例如我使用InfoCell和PersonCell),您可以尝试这样做:

if(viewType == INFO_VIEW)
{
    InfoCell *cell = (InfoCell *)[tableView dequeueReusableCellWithIdentifier:@"info_cell"];
    // do your stuff for info here
}
else if(viewType == PERSON_VIEW)
{
    PersonCell *cell = (PersonCell *)[tableView dequeueReusableCellWithIdentifier:@"person_cell"];
    // do your stuff for person here
}

答案 2 :(得分:-1)

为什么不做这样的事情?

[[cell textLabel] setText: @"text goes here"];

跳过UILabel部分?