两个 UIViewController 的不同 UITableView 中的一个自定义 UITableViewCell
Posted
技术标签:
【中文标题】两个 UIViewController 的不同 UITableView 中的一个自定义 UITableViewCell【英文标题】:One Custom UITableViewCell in different UITableView of two UIViewControllers 【发布时间】:2014-05-27 20:45:12 【问题描述】:我的问题是这样的
-
我有一个带有 xib 文件的自定义
UITableView
单元类。
在界面生成器中,我已将其文件所有者设置为 VC1。 (子类
UIViewController
有一个 UITableView
)
到目前为止一切都很好。 UITableView
显示 VC1 中的数据。
现在我想在 VC2 的UITableView
中使用相同的 customCell。
在这个 stag 中,我应该在我的单元格的 File's Owner 中设置什么? VC1 还是 VC2?
希望我能把情况弄清楚。
【问题讨论】:
您实际上是否在 Interface Builder 中将任何内容连接到 File's Owner? VC1 和 VC2 是否继承自可以用作文件所有者的公共类? 我将我的每一个 VC 都继承给了一个 ParentVC,只是为了把所有 VC 中的所有通用项都放在那里。是的,我的 VC1 和 VC2 是用 ParentVC 继承的,而 ParentVC 是用 UIViewController 继承的。 那么您可以将文件的所有者设置为 ParentVC。 @Isaac:是的,它奏效了。我做的更多,我必须在两个 VC 中保持相同的自定义单元变量名称。这是必需的,因为我必须在其 xib 文件中链接自定义单元格的 IBOutlet。 幸运的是,我习惯于为每组类创建 Parent 类。如果我们没有父 VC 怎么办,那么这种情况有解决办法吗?因为大多数人直接用 UIViewController 继承他们的 VC。 【参考方案1】:你看过UITableView
类的- (void)registerNib:(UINib *)nib forCellReuseIdentifier:(NSString *)identifier
吗?
此方法允许您从单独的 xib 注册单元格。您可以在多个 tableViews 中注册同一个单元格。
例子:
UINib *nib = [UINib nibWithName:@"CustomCell.xib" bundle:nil];
[self.tableView registerNib:nib forCellReuseIdentifier:@"CustomCell"];
现在您可以将tableView:cellForRowAtIndexPath:
中的自定义单元格与上面指定的重用标识符一起使用。
【讨论】:
那么在这种情况下,CustomCell 的 File 的 Owner 会不会很重要?还是我们真的要设置它? 这取决于。您可以有一个自定义单元格类,其中您有 IBOutlets 到单元格内的自定义视图。然后将 CustomCell.xib 中的文件所有者设置为 UITableViewCell 的子类。否则,如果您不需要引用单元格内的视图,则无需执行任何其他操作。它会起作用的。【参考方案2】:您可能应该定义一个从您的 ParentVC 继承的视图控制器类,并且 VC1 和 VC2(以及任何其他将使用特定自定义单元格 XIB 的视图控制器)从该类继承,以便您可以定义插座和其他东西想在这个新的视图控制器类中使用,并将这个新的视图控制器类用作 XIB 中的文件所有者。
【讨论】:
以上是关于两个 UIViewController 的不同 UITableView 中的一个自定义 UITableViewCell的主要内容,如果未能解决你的问题,请参考以下文章
一个 UIViewController 中的两个 UICollectionView
将UIViewController呈现为UIModalPresentationFormSheet和U IModalPresentationOverCurrentContext
XCode/iOS:将 UIGestureRecognizerDelegate 添加到 UIViewController 后,Storyboard Segue 事件不起作用
在一个 UIViewController 中托管不同的 UITableViewController,例如具有多个视图的日历应用程序