我目前有两个UITableViewControllers,一个是自定义单元格的原型,另一个不是。因为它们都通过从第一个到第二个的推动连接而连接。我将选定的自定义单元格传递给第二个tableView。
一切正常,但是当我回到第一个视图时,所选(并传递)的单元格被隐藏,但当我滚动它足以隐藏空白区域并向后滚动显示时。
我该如何解决这个问题?
答案 0 :(得分:1)
Big Nerd Ranch Guide基本上是出于这种原因而远离故事板。 关于故事板的其他事情,它说:
“整体故事板使代码更容易,代码更难处理”。
不确定是否应该通过push segue传递一个单元格。 不使用storyboard时,通常会创建一个名为e..g MyCustomerTableviewCell的UITableViewCell类型的新文件。 然后在您的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,确保它的文件所有者是MyCustomTableViewCell。
然后在你的UITableView文件中,执行此操作......
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
MyCustomTableViewTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"MyCustomTableViewCell"];
...
return cell;
}
你可以将它作为故事板项目的一部分来做(尽管我没有尝试在一个项目中缺少XIB和Storyboard)。
答案 1 :(得分:1)
如果我正确理解你在做什么,你将把tapped单元格的引用传递给第二个视图控制器,然后你在第二个控制器的表视图中显示它,在cellForRowAtIndexPath方法中传递相同的引用。 这似乎不是一个好选择:-) 第一:因为该单元已被分配并排队等待在第一个视图控制器中使用。在任何时候,单元可以由第一视图控制器接收prepareForReuse消息。 第二:当您在第二个表视图中显示单元格时,将从第一个表视图中删除该单元格。
如果您不想在第二个视图控制器中创建另一个原型单元格,例如,您可以在第一个视图控制器中分配 new 单元格,将所有属性从轻敲的单元格复制到新的,然后将新的传递给第二个viewcontroller。 这是我考虑过的第一个解决方案,但确定还有其他更好的解决方案: - )