在我的应用中,我需要扩展tableviewcell
,当用户点击该单元格中的特定按钮(类似于切换,点按将展开行并在其他时间录制将折叠行时)。所以我已经实现了自定义委托方法,以了解需要重新加载哪个单元格并使用'reloadRowsAtIndexPaths'
重新加载该特定单元格。
第一次点击按钮时工作正常,甚至是第二次,但它第三次崩溃时说“无法在包中加载NIB:'NSBundle </Users/path/myApp.app> (loaded)'
名称为'ContactCell''
我的问题是重新加载第一次和第二次为什么第三次崩溃的细胞?
我的代码:
[contactTableView beginUpdates]; // Inside the custom delegate method
[contactTableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexpath] withRowAnimation:UITableViewRowAnimationNone]; // indexpath is which i get from cell through custom delegate method
[contactTableView endUpdates];
ContactTableCell *cell; //Inside the cellForRowAtIndexPath
static NSString *CellIdentifier = @"ContactCell";
cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
// load a new cell from the nib file
[[NSBundle mainBundle] loadNibNamed:@"ContactCell" owner:self options:nil];
cell = self.contactCell;
cell.delegate = self;
cell.indexPath = indexPath;
self.contactCell = nil;
}
为什么会崩溃?
答案 0 :(得分:1)
好的,这有几个问题。首先,从nib加载不应该在这个类中,它应该在ContactTableCell
方法中init
方法(initWithNib
或你想要的方式)
您的XIB需要确保ContactTableCell
也是分配给它的自定义类。
所以使用nib的init会像这样
//in ContactTableCell.m
-(id)initWithNib{
self = [[[NSBundle mainBundle] loadNibNamed:@"ContactCell" owner:self options:nil] firstObject];
if(self){
//do extra customisation stuff/ set labels etc.
}
return self;
}
然后你会打电话给
if (cell == nil) {
// load a new cell from the nib file
cell = [[ContactTableCell alloc] initWithNib];
cell.delegate = self;
cell.indexPath = indexPath;
}
答案 1 :(得分:0)
在viewDidLoad
注册你的笔尖一次。
NSString *cellIdentifier=@"cellIdentifier";
UINib *nib=[UINib nibWithNibName:cellIdentifier bundle:[NSBundle mainBundle]];
[self.yourTableView registerNib:nib forCellReuseIdentifier: cellIdentifier];
希望这会起作用