Fen*_* Li 6 xcode objective-c uikit tableview ios
我在storyboard文件中创建了一个标识符为"mainViewTableCell"的原型单元格,并将主表视图与名为"NTTableViewController"的自定义控制器类连接起来.我在NTTableViewController.m中实现了函数"tableView cellForRowAtIndexPath",如下所示:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString* MAINVIEW_CELLIDENTIFIER = @"mainViewTableCell";
UITableViewCell *newCell = [tableView dequeueReusableCellWithIdentifier: MAINVIEW_CELLIDENTIFIER];
if (newCell == nil) {
newCell = [[UITableViewCell alloc] initWithStyle: UITableViewCellStyleSubtitle reuseIdentifier: MAINVIEW_CELLIDENTIFIER];
[newCell autorelease];
newCell.selectionStyle = UITableViewCellSelectionStyleNone;
}
NTContactItem* currentItem = [self.contactItemContainer objectInContainerAtIndex: indexPath.row];
NSString* firstName = currentItem.firstName;
NSString* lastName = currentItem.lastName;
NSString* fullName = [firstName stringByAppendingFormat: lastName];
[newCell.textLabel setText: fullName];
[newCell.detailTextLabel setText: currentItem.mobilePhone];
return newCell;
}
Run Code Online (Sandbox Code Playgroud)
但我继续从dequeueReusableCellWithIdentifier获取nil,并且每次都必须创建一个新的cell实例.
那么,有什么不对?
代码:项目
谢谢大家.
Fir*_*eer 26
有了具有原型单元格的故事板和tableview,[tableView dequeueReusableCellWithIdentifier:]不应该返回nil.即使这是第一个单元格,并且重用队列中已经没有单元格,tableview将创建原型单元格的新实例并返回该实例.
在你的情况下,问题是完全不同的(我下载你的项目,因为我真的很好奇).
在方法中的应用程序委托中application:didFinishLaunchingWithOptions:,您将重新初始化此tableviewcontroller.当你打电话时[masterController init],这个电话[super init]会拨打电话[UITableViewController initWithStyle:].
这会导致控制器创建一个新的UITableView,它与故事板中的UITableView不同.新的UITableView没有原型单元格,所以这就是为什么dequeueReusableCellWithIdentifier:返回nil.
当然,教训是不重新初始化已经初始化的Objective-C对象.从故事板加载表视图控制器时,加载机制将使用它初始化它initWithCoder:.因此,如果您需要进行一些自定义初始化工作(比如在您的情况下设置NSMutableArray),那么只需覆盖initWithCoder:和/或awakeFromNib.
您可以根据需要覆盖这些方法,但不要自己调用它们.双方initWithCoder:并awakeFromNib会被情节提要/笔尖加载机制被调用.
如果一切正确,则无需在此以编程方式创建单元格.不需要这段代码:
// This bit is unnecessary with storyboards:
if (newCell == nil) {
newCell = [[UITableViewCell alloc] initWithStyle: UITableViewCellStyleSubtitle reuseIdentifier: MAINVIEW_CELLIDENTIFIER];
[newCell autorelease];
newCell.selectionStyle = UITableViewCellSelectionStyleNone;
}
Run Code Online (Sandbox Code Playgroud)
希望有所帮助.
| 归档时间: |
|
| 查看次数: |
7685 次 |
| 最近记录: |