在故事板中创建自定义UITableViewCell

时间:2011-10-23 01:27:06

标签: iphone objective-c ios uitableview ios5

想要创建静态菜单(IOS 5)并尝试在故事板中创建自定义单元格,然后加载到分组的表格视图中。

我已经创建了插座

@property(nonatomic,strong) IBOutlet UITableViewCell *labelCell;

ViewController类设置为正确的TableViewController,我已将自定义单元格连接到此插座。

我也设置了委托和数据源。

我有

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath   *)indexPath
{
  return self.labelCell;
}

我确信这有一个错误,但我只是想显示一个单元格并从那里开始。似乎没有任何通过故事板在IB中进行自定义单元格的示例。我仍然可以使用旧方法创建一个xib文件并将其加载到mainBundle中,但我只是想保持最新状态。

但是当我加载此视图控制器时,我得到了一个崩溃。 SIGABRT

3 个答案:

答案 0 :(得分:27)

以下是我在使用故事板时了解如何为您的桌子获取单元格的内容。将UITableView拖动到视图中时,它会将原型单元格设置为子视图。要使用此原型单元格,请在属性检查器中设置唯一的重用标识符,然后使用相同的标识符将cellForRowAtIndexPath:方法中的单元格出列。如果dequeue调用返回nil,我将从头开始创建一个单元格的代码;我不认为它会发生。因此,只需将单元格出列,使用通常的UITableViewCell方法对其进行配置,然后将其返回。

但您也可以创建UITableViewCell的自定义子类。只需在storyboard的类标识检查器中设置类名,然后将所需的任何元素从“对象”选项板拖到单元格中。然后在子类的代码文件中为它们创建IBOutlet属性,并以通常的方式将它们连接到故事板中的单元格。这比在代码中完成所有操作要好得多!

最后,您的桌子中可以有多种单元格。只需将UITableViewCell对象从选用板拖到表中,然后在属性检查器中为每个对象分配一个唯一的重用标识符。在您的cellForRowAtIndexPath:方法中,选择每个单元格的类型,您可以拥有一个非常灵活的表格视图。

答案 1 :(得分:13)

如果您已在故事板中将UITableView设置为使用“静态单元格”,则无需实现任何UITableViewDataSource方法,您可以直接在Interface Builder中修改单元格。对于单个标签单元格,选择单元格并将其类型更改为“基本”。您现在可以像编辑任何其他视图对象一样编辑单元格。

答案 2 :(得分:4)

This教程对我很有帮助。您可以通过标记引用所需的任何对象。

在故事板中拖动UIImageViewUILabel等并将标记设置为100(无论您想要什么),然后在- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath中使用标记引用它。

以下是本教程中的示例代码,只需记住在故事板中设置标记:

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
 {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

// Configure the cell...
if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}

// Display recipe in the table cell
Recipe *recipe = [recipes objectAtIndex:indexPath.row];
UIImageView *recipeImageView = (UIImageView *)[cell viewWithTag:100];
recipeImageView.image = [UIImage imageNamed:recipe.imageFile];

UILabel *recipeNameLabel = (UILabel *)[cell viewWithTag:101];
recipeNameLabel.text = recipe.name;

UILabel *recipeDetailLabel = (UILabel *)[cell viewWithTag:102];
recipeDetailLabel.text = recipe.detail;

return cell;
 }