IOS7自定义TableViewCell将不会出现

时间:2014-06-20 10:08:12

标签: ios uitableview ios7 ios7.1

我正在尝试使用自定义UITableViewCell创建项目。自定义单元格永远不会加载,它们只是空白。在项目的这一点,我要做的是将UITableViewCell放在.xib中,按照我想要的方式设计它,并指定其重用标识符以及组件的标记ID,以便我可以在以后的代码中使用它们。

我已经谷歌搜索了一下,发现了几个看起来像我想做的教程,以及许多有问题答案的SO问题。在这一点上,它可能只是我的脑袋旋转太多不同的角度和解决方案。

这是我目前尝试使用我的UITableView注册自定义单元格的尝试,但在设备上运行时,表格视图中的行完全为空白。

    UITableViewCell* cell = [self.tableView dequeueReusableCellWithIdentifier:@"MyCell"];
if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"MyCell"];
}

UILabel* l1 = (UILabel*)[cell viewWithTag:1];
UILabel* l2 = (UILabel*)[cell viewWithTag:2];
UILabel* l3 = (UILabel*)[cell viewWithTag:3];

l1.text = @"Foobar";
l2.text = @"Foobar";
l3.text = @"Foobar";

我很确定我已经正确地连接了所有属性,但在这个阶段我需要一双新鲜的眼睛为我指出facepalm。

有趣的文件是FilmerView.m / h / xib,单元格在FilmerViewCell.xib中。运行应用程序时,此TableView位于选项卡栏控制器的第二个选项卡中。

项目:

http://speedy.sh/WhhpP/test12.zip

3 个答案:

答案 0 :(得分:1)

我无法提供完整的答案,但请查看tableview方法。 registerNib:forCellReuseIdentifier:

此外,请停止使用该出列方法。使用包含indexPath的那个。

然后你不必检查细胞之后是否为零。

修改

viewDidLoad(或类似的地方)......

UINib *cellNib = [UINib nibWithNibName:@"MyCustomCellXibFileName" bundle:[NSBundle mainBundle]];
[self.tableView registerNib:cellNib forCellReuseIdentifier:@"CellIdentifier"];

现在在表视图中使用数据源方法......

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

    // no need to check cell == nil.
    // this method is guaranteed to return a non nil cell.
    // if it doesn't then the program will crash telling you that you need to...
    // register a class or nib (but we just did this in viewDidLoad) :D

    // configure your cell here...
    [self configureMyCell:(MyCustomCell *)cell atIndexPath:indexPath];

    return cell;
}

- (void)configureMyCell:(MyCustomCell *)cell atIndexPath:(NSIndexPath *)indexPath
{
    cell.nameLabel.text = @"Hello, world";
}

希望这有帮助。

答案 1 :(得分:0)

  1. 确保已设置tableView的数据源和委托属性。
  2. 确保您已实施(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section方法,并返回正值(> 0)。

答案 2 :(得分:-1)

评估以下内容:

  1. 是否在XIB中设置了ReuseIdentifier。选择单元格时,请参阅右侧Interface Builder中的“属性”选项卡。
  2. 是否正确设置了AutoresizingMasks以使标签可见?
  3. WrapModes:您选择了哪个?在使用wrapmode WrapWord时,字体是否太大,以至于在下一行中移动的文本变得不可见?
  4. 将UITableViewCellss内容视图的背景颜色设置为白色或透明以外的颜色,以及标签的背景颜色,以查看单元格是否在那里。
  5. 在您的表上手动调用numberOfRowsInSection,传递标识目标部分的正确NSIndexPath,并查看其是否大于0以确认TableView甚至尝试加载数据,即单元格。 (或者在方法中设置断点或执行NSLog。)
  6. 在cellForRowAtIndexPath中执行NSLog以确认返回的单元格不是nil,甚至调用该方法!