1

我目前有两个 UITableViewController,一个带有自定义单元格的原型,另一个没有。因为它们都是通过从第一个到第二个的 push segue 连接的。我将选定的自定义单元格传递给第二个 tableView。

一切正常,除了当我回到第一个视图时,选择的(并通过的)单元格被隐藏了,但是当我滚动它足以隐藏空白并向后滚动时它会显示。

我怎样才能解决这个问题?

4

2 回答 2

1

Big Nerd Ranch Guide基本上说出于这种原因远离故事板。除了关于故事板的其他内容外,它还说:

“整体故事板使简单的代码更容易,而困难的代码更难”。

不确定您是否应该通过 push segue 传递一个单元格。当不使用情节提要时,您通常会创建一个名为 UITableViewCell 类型的新文件,例如 MyCustomerTableviewCell。然后在你的 UITableView viewDidLoad 方法中,创建一个新的 Nib 并将其添加到 tableView,

UINib *nib = [UINib nibWithNibName:@"MyCustomTableViewCell" bundle:nil];
// register this nib that contains the cell
[[self tableView] registerNib:nib forCellReuseIdentifier:@"MyCustomTableViewTableViewCell"];

然后创建一个新的空 XIB 文件(file->new->User Interface->empty)并将其命名为 MyCustomTableViewCell.xib。将 UITableViewCell 放入界面构建器空间,将其从 UITableViewCell 类型更改为 MyCustomTableViewCell,确保它的 File's Owner 是 MyCustomTableViewCell。

然后在您的 UITableView 文件中,执行此操作...

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
MyCustomTableViewTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"MyCustomTableViewCell"];
...
return cell;
}

无论如何,您都可以将其作为情节提要项目的一部分进行(尽管我没有尝试在一个项目中缺少 XIB 和情节提要)。

于 2012-11-04T19:48:12.013 回答
1

如果我正确理解你在做什么,你将点击单元格的引用传递给第二个视图控制器,然后你在第二个控制器的表视图中显示它,在 cellForRowAtIndexPath 方法中传递相同的引用。这似乎不是一个好的选择 :-) 首先:因为该单元已分配并排队等待在第一个视图控制器中使用。在任何时候,单元格都可以接收到第一个视图控制器的 prepareForReuse 消息。第二:当您在第二个表格视图中显示单元格时,该单元格将从第一个表格视图中删除。

如果您不想在第二个视图控制器中创建另一个原型单元格,例如,您可以在第一个单元格中分配一个单元格,将所有属性从点击的单元格复制到新单元格,然后将新单元格传递给第二个视图控制器。这是我想到的第一个解决方案,但肯定还有其他更好的解决方案 :-)

于 2012-11-04T19:59:25.253 回答