我在 XIB 内的 uiviewcontroller 内使用 tableview。因为控制器不是 UItablecontroller,所以我不能直接配置单元格。如果我拖入一个表格视图单元格,我可以使用单元格标识符等对其进行配置,但 XIB 不使用我的表格视图单元格。我如何加入他们?我宁愿不使用代码,因为这似乎违反了工作流程的直觉。
2 回答
如果您使用 Storyboard,您可以直接在 VC 中添加自定义单元并进行配置。但是,如果您使用的是 xib,您必须创建一个自定义单元格类并以编程方式加载它们,或者在单独的 xib 中创建一个带有自定义单元格的自定义类,然后从 xib 加载自定义单元格,甚至您只需创建一个带有简单自定义的 xib表格单元格并从 xib 加载。在 UITableView 上参考苹果文档
据我了解,您需要在代码中使用自定义单元格。如果您不使用情节提要,请尝试使用它。在这里,我为自定义单元格创建了一个自定义类,并在 xib 中添加了自定义单元格。我添加了一个单独的 xib,在 xib 中拖放 UITableViewCell(如果存在,请删除任何视图)。现在单击您刚刚添加的单元格,在身份检查器中将类名称更改为您创建的自定义类的名称。选择文件所有者并更改其类到您需要自定义单元格的类的名称。(这表明您的单元格将用于连接 tableview 的委托和数据源的特定类)。现在在你想要你的单元格的类中,添加一个 UITableViewCell 类型的 IBOutlet。将此连接到您在 xib 中创建的单元格。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellIdentifier = @"CustomCell";
YourCustomCell *cell = (YourCustomCell*)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (!cell)
{
[[NSBundle mainBundle] loadNibNamed:@"YourCustomCell"
owner:self
options:nil];
cell = self.yourOutletCell;
self.yourOutletCell = nil;
}
}
如果您正在使用 xib 加载并且如果您有多个 xib 的自定义单元格,则可以通过 xib 名称加载它们,如下所示
NSArray *topLevelObjects;
topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"YourCustomCell" owner:self options:nil];
for (id currentObject in topLevelObjects)
{
if ([currentObject isKindOfClass:[UITableViewCell class]])
{
cell = (YourCustomCell *) currentObject;
break;
}
}
如果是静态单元格,可以用 Outlet 指向这个单元格,然后在cellForRowAtIndexPath