在 Xcode5 中创建 CustomCells

Posted

技术标签:

【中文标题】在 Xcode5 中创建 CustomCells【英文标题】:Creating CustomCells at Xcode5 【发布时间】:2013-12-08 00:48:28 【问题描述】:

我试图在没有故事板的情况下在 Xcode 5 中创建一个 CustomCell(idk,从来不是我的事),但似乎不可能。有人知道怎么解决吗?

我尝试了什么:

    我在我的 ViewController nib 中创建了一个 Cell,并将它与我的 Viewcontrollers .h 连接起来。效果很好,但它只适用于多个自定义单元格 (enter link for the tut)。

    和以前一样,但现在我将它与 UITableViewCell 的子类连接起来,但这里应用程序崩溃了。

我已经设置了单元格的标识符,但没有办法。有人有想法吗?

编辑 1: 我重新检查了我的代码。现在我明白了,我仍然认为它基于 xcode 5:

代码:

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

static NSString *CellIdentifier = @"HomeLoginCell";
GSCustomLoginCell *tableCell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
NSLog(@"%d", indexPath.row);
NSLog(@"%@", [tableSource objectAtIndex:indexPath.row]);
if (indexPath.row == 0) 
    tableCell.cellText.text = [tableSource objectAtIndex:indexPath.row];
    tableCell.cellIcon.image = [UIImage imageNamed:@"user_male-32"];
else if(indexPath.row == 1)
    tableCell.cellText.text = [tableSource objectAtIndex:indexPath.row];
    tableCell.cellIcon.image = [UIImage imageNamed:@"enter-32"];


return tableCell;

错误:

2013-12-08 02:02:37.646 Group2Study[3921:60b] *** Assertion failure in -[UITableView _configureCellForDisplay:forIndexPath:], /SourceCache/UIKit/UIKit-2903.23/UITableView.m:6246

2013-12-08 02:02:37.648 Group2Study[3921:60b] * 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“UITableView 数据源必须从 tableView:cellForRowAtIndexPath 返回一个单元格:” * 首先抛出调用栈: (0x2d72de83 0x37a8a6c7 0x2d72dd55 0x2e0d60af 0x2ffe5649 0x2fec3cf5 0x2ffe54b9 0x2ffe432d 0x2ff8c6cd 0x2ff8bef1 0x2feb2353 0x2fb38943 0x2fb34167 0x2fb63425 0x2ff2f18f 0x2ff2d7f9 0x2ff2ca37 0x2ff2c9bf 0x2ff2c957 0x2ff25459 0x2feb8397 0x2ff2c6a9 0x2ff2c17d 0x2febd581 0x2febaae5 0x2ff2582d 0x10e2a9 0x2ff22aad 0x2ff224f3 0x2ff1cb41 0x2feb7a07 0x2feb6cfd 0x2ff1c321 0x3239c76d 0x3239c357 0x2d6f8777 0x2d6f8713 0x2d6f6edf 0x2d661471 0x2d661253 0x2ff1b5c3 0x2ff16845 0x11c661 0x37f83ab7) libc++abi.dylib:以 NSException 类型的未捕获异常终止 (lldb)

【问题讨论】:

描述崩溃可能会有所帮助... 在我将 VC 设置为根窗口之前,它在 [self.window makeKeyAndVisible] 上崩溃了。它只是说在主线程上崩溃了.. 现在...一些上下文代码...? 更新了,因为我重新检查了代码。 为什么要使用 xibs 而不是情节提要?故事板是 Apple 对 xibs 的“替代品”(从某种意义上说,它是在 ios 中制作视图的新方法,并不是说您仍然不能单独使用 xibs 或与故事板结合使用)。我可以理解想用代码做所有事情,但如果你还是要使用 IB,为什么不使用故事板呢? 【参考方案1】:
GSCustomLoginCell *tableCell = [tableView 
    dequeueReusableCellWithIdentifier:CellIdentifier];

if(!tableCell) 
   tableCell = [[GSCustomLoginCell alloc] init];

dequeueReusableCellWithIdentifier 仅在重用已使用的单元格时返回一个单元格。所以......它第一次尝试加载您的表格时,它不会回收任何单元格,并且此方法将返回nil。所以,在调用这个方法之后,你应该立即检查它是否是nil,如果是nil,则实例化一个新对象。

错误消息说明您没有返回UITableViewCell,正如我所解释的,这是因为dequeueReusableCellWithIdentifier 正在返回nil

【讨论】:

facepalm.. 我应该去睡觉了...在我接受你的回答之前,它现在可以工作了,但是我的单元格子视图(imageview 和 UILabel)没有显示在表格中。有什么想法吗? 在您的问题中,我没有看到 imageview 或 UILabel,除非您指的是 GSCustomLoginCell 的属性,在这种情况下,您可能需要在之前发布一些课程中的代码我可以大胆猜测一下。 更正那里的属性,你想看什么代码?我刚刚创建了 GSCustomLoginCell,连接了属性并合成了属性 @SaifDeen,抱歉,我以为您是在笔尖中创建单元格,但是是的,您可以在笔尖中创建单元格。只需创建一个空的用户界面文件,然后将 UITableViewCell 拖入其中。随意修改它,给它一个标识符,然后用文件名注册那个 nib。 @SaifDeen,在 UITableView 类参考中查找方法 registerNib:forIdentifier:。如何使用它是不言自明的。

以上是关于在 Xcode5 中创建 CustomCells的主要内容,如果未能解决你的问题,请参考以下文章

XCode 5:如何在工作区中创建多个项目?

在 Xcode 5.0.1 中创建 OS X Cocoa App Web 视图

如何使用缺少今天构建的列表在 iTunesConnect 中创建“构建”记录?

Xcode 5 - iOS - 如何在没有 Storyboard 或 XIB 的情况下在 Xcode 中创建视图控制器以及如何将其配置为 AppDelegate 作为根视图

未找到 UIKit/UIKit.h 文件

如何在没有 Apple Developer 帐户的情况下在 xcode 6 中创建 ipa?