我有一个带有自定义部分标题的表格视图。节标题的视图在情节提要中定义并连接到实例变量。有没有办法从情节提要中请求视图的新实例?
在过去,我通过在自己的 xib 文件中定义节头并使用获取新实例来完成此操作
[[NSBundle mainBundle] loadNibNamed:@"TimerViewSectionHeader" owner:self options:nil];
UIView *newHeaderView = self.sectionHeaderView;
我有一个带有自定义部分标题的表格视图。节标题的视图在情节提要中定义并连接到实例变量。有没有办法从情节提要中请求视图的新实例?
在过去,我通过在自己的 xib 文件中定义节头并使用获取新实例来完成此操作
[[NSBundle mainBundle] loadNibNamed:@"TimerViewSectionHeader" owner:self options:nil];
UIView *newHeaderView = self.sectionHeaderView;
我不认为有办法做到这一点。最好的办法是将 tableview 自定义标题视图放在一个单独的 nib 中,并在需要使用它时像在代码示例中那样加载它。
我试图做同样的事情并遇到了同样的问题。
我非常喜欢使用故事板,并且对我创建工作 UI 的速度印象深刻。但是,一旦您需要重用视图,将它们与其UIViewController
子类一起放入单独的 nib 是很有意义的。
UIView
然后,您可以在应该重用视图的所有位置放置一个泛型,并使用您的 ViewController 添加视图:
[myReusableViewController loadView];
[myReusableViewController viewDidLoad]; // You have to handle view callbacks yourself.
[self.myReusableViewPlaceholder addSubview:myResusableViewController.view];
[myReusableViewController viewWillAppear:YES];
所以总结一下:
UIViewController
添加占位符。UIView
在另一个答案中,我想到了故事板的一些优点和缺点
我为此提出的解决方案如下:
我有一个表格视图,其中包含多个显示复杂数据的原型单元格。详细视图和事务处理视图有一个segue。
这第一个 tableview 有一个搜索按钮,它显示一个带有结果的新 tableview。它需要与推送它的主 tableview 相同的功能;包括对细节和交易进度视图的segues,因此:
在情节提要上,选择并复制您的主表视图。取消选择并粘贴。创建从主表视图到第二个表视图的推送序列;或从您想从哪里导航到它。根据需要修改第二个表格视图。IE:如果它需要一些 UI 更改没问题。
创建一个新的 viewcontroller 类,它是运行主 tableview 的 viewcontroller 的子类。
覆盖子类中的数据委托以提供所需的数据子集。
回到故事板,选择您的第二个 tableview 控制器,然后在身份检查器中选择您的子类作为自定义类。
为了使该解决方案顺利运行,您的应用确实需要管理视图的数据。您可以使用 prepareforsegue 将数据从第一个 tableview 传递到第二个,但我发现从许多角度来看,应用程序数据模型更加灵活。
除非您有通过 segue 推送到子视图的按钮,否则您的子类将需要覆盖通过带有身份的 segue 推送的函数。NB Segues 必须有唯一的标识符,如果你 id 他们。
解决这个问题需要大量的试验和错误,但是一旦你理解了这个概念,它就会是一个相对顺利的解决方案,具有很强的适应性并且实施起来也不错。
我不确定视图,但我能够从我的故事板中获取视图控制器的方式如下。
UIViewController *viewController = [self.storyboard instantiateViewControllerWithIdentifier:@"IdentifierName"];
从这里,也许你可以像以前用笔尖一样使用它。
只需将一个表格视图的转换连接到我想要重用的那个,我就能够重用情节提要中的一个视图。
所以我想重用的tableview被指向两次。它有点工作,但我遇到的问题是在我的应用程序委托中设置一个变量(使用 instantiateViewControllerWithIdentifier)到我正在重用的表视图。似乎如果我重用它,情节提要正在创建我的 tableview 的 2 个实例,而我使用 instantiateViewControllerWithIdentifier 获得的那个不是我想要的。
我不确定这是否是正确的方法。但我认为许多其他人正在以某种方式这样做。使用情节提要中的自定义表格单元格,我怀疑很多人都想重用他们的视图。
例如:我们想重用下面显示的情节提要中的视图(包括子视图)。
到目前为止,我所知道的最佳解决方案是将视图相关代码剪切并粘贴到 New Singe View 文件中,而不会丢失信息。
详细步骤如下
第 1 步:重命名我们想要重用的视图。只需为第 2 步做准备。
第 2 步:打开故事板作为源代码,以便剪辑我们需要的 XML 代码
Step 3、4:搜索并剪辑我们需要的代码
步骤 4.5(不需要):作为 Interface Builder 打开以查看已删除的视图
Step 5、6:新建XXX.xib,粘贴我们刚才截取的代码
第 7 步:重要。将代码插入<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
XXX.xib 源代码。警告:在将其作为 Interface Builder 打开之前执行此操作!否则,您将看到错误的尺寸和布局警告。
[![步骤 7][9]][9]
第八步:新建 XXX.swift 连接 XXX.xib
[![步骤 8][10]][10]
第 9 步:在我们想要的任何位置添加视图
[![步骤 9][11]][11]
我收到警告:“您需要至少 10 个声望才能发布超过 8 个链接。” 你能支持我上传剩下的3张截图吗?