UITableViewCells在滚动时被清空(objc)

时间:2015-02-26 07:40:00

标签: ios objective-c ios8

UITableViewCells在滚动(Objective-C)

上清空

我开始在表格视图中滚动时,UITableViewCells出现问题就会出现问题。

我已经看过Cells become empty after scrolling. (Xcode) - 但问题仍然存在。

1)我有一个popover视图控制器,它提供了一种登录某些管理的方法。成功登录后(尚未实现,LOGIN按钮只需一个直接到测试tableView - 稍后应从某个外部数据库提供)。

2)成功登录后,popover中的登录视图将被删除,自定义UITableViewController将与其自己的XIB一起发挥作用。

3)此UITableViewController使用自定义UITableViewCell - 因为在此配置中无法使用原型单元格。

这一切都在我滚动表格的地方 - 并且由于某种原因所有单元格都被清空了。

这是代码向下运行(我省略了显而易见的,例如属性和表格部分等设置):

1)customPopUpViewController(XIB,.h,.m):

- (IBAction)loginButtonPressed:(UIButton *)sender {
    UITableViewController *libraryTableViewController = [[LibraryAdminTableViewController alloc]initWithNibName:@"LibraryAdminTableViewController" bundle:nil];
    libraryTableViewController.view.frame = CGRectMake(0, 179, libraryTableViewController.view.frame.size.width, libraryTableViewController.view.frame.size.height);
    [self.view addSubview:libraryTableViewController.view];
}

2)LibraryAdminTableViewController(XIB,.h,.m):

- (void)viewDidLoad {
    [super viewDidLoad];
    self.LibraryAdminTable.delegate = self;
    self.LibraryAdminTable.dataSource = self;
    self.tblContentList = [[NSMutableArray alloc]init];
    self.tblContentList = [NSMutableArray arrayWithObjects:@"Sync Pack 1",@"Sync Pack 2",@"Sync Pack 3", nil];
    [self.LibraryAdminTable registerNib:[UINib nibWithNibName:@"LibraryAdminTableViewCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:@"LibraryAdminCell"];   
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    LibraryAdminTableViewCell *cell = [self.LibraryAdminTable dequeueReusableCellWithIdentifier:@"LibraryAdminCell" forIndexPath:indexPath];
    NSString* trackList = [self.tblContentList objectAtIndex:indexPath.row];
    cell.cellLabel.text = trackList;
    return cell;
}

3)LibraryAdminTableViewCell(XIB,.h,.m) - 我在Attributes Inspector“LibraryAdminCell”中给出了标识符:

@property (strong, nonatomic) IBOutlet UILabel *cellLabel;

我错过了什么?

2 个答案:

答案 0 :(得分:0)

它解决了。根据这个thread我必须通过弹出控制器中的属性获得对自定义UITableViewController的强引用,因为ViewController(作为tableView的DataSource)不会保留在内存中。

答案 1 :(得分:-1)

这种情况正在发生,因为你没有创建一个新的单元格,当tableview试图使一个单元格出列,并且它没有得到单元格,那么它应该创建要使用的单元格但是你不创建任何单元格,所以它返回nil。尝试下面的代码


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    LibraryAdminTableViewCell *cell = (LibraryAdminTableViewCell*)[self.LibraryAdminTable dequeueReusableCellWithIdentifier:@"LibraryAdminCell"
                                                                                                               forIndexPath:indexPath];
    if (cell == nil)
    {
        cell = [[LibraryAdminTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                                reuseIdentifier:@"LibraryAdminCell"];

        cell.selectionStyle = UITableViewCellSelectionStyleNone;
    }
    NSString* trackList = [self.tblContentList objectAtIndex:indexPath.row];
    cell.cellLabel.text = trackList;
    return cell;
}