6

我有一个带有自定义部分标题的表格视图。节标题的视图在情节提要中定义并连接到实例变量。有没有办法从情节提要中请求视图的新实例?

在过去,我通过在自己的 xib 文件中定义节头并使用获取新实例来完成此操作

[[NSBundle mainBundle] loadNibNamed:@"TimerViewSectionHeader" owner:self options:nil];
UIView *newHeaderView = self.sectionHeaderView;
4

6 回答 6

3

我不认为有办法做到这一点。最好的办法是将 tableview 自定义标题视图放在一个单独的 nib 中,并在需要使用它时像在代码示例中那样加载它。

于 2011-12-19T01:32:21.840 回答
3

我试图做同样的事情并遇到了同样的问题。

我非常喜欢使用故事板,并且对我创建工作 UI 的速度印象深刻。但是,一旦您需要重用视图,将它们与其UIViewController子类一起放入单独的 nib 是很有意义的。

UIView然后,您可以在应该重用视图的所有位置放置一个泛型,并使用您的 ViewController 添加视图:

[myReusableViewController loadView];
[myReusableViewController viewDidLoad]; // You have to handle view callbacks yourself.

[self.myReusableViewPlaceholder addSubview:myResusableViewController.view];
[myReusableViewController viewWillAppear:YES];

所以总结一下:

  • 使用故事板,很棒
  • 在情节提要中创建应用程序的脚手架,以及任何静态视图(如关于屏幕等)
  • 在自定义 nib + 子类中创建重复使用的视图,并在情节提要中UIViewController添加占位符。UIView

在另一个答案中,我想到了故事板的一些优点和缺点

于 2011-12-21T13:56:59.343 回答
3

我为此提出的解决方案如下:

我有一个表格视图,其中包含多个显示复杂数据的原型单元格。详细视图和事务处理视图有一个segue。

这第一个 tableview 有一个搜索按钮,它显示一个带有结果的新 tableview。它需要与推送它的主 tableview 相同的功能;包括对细节和交易进度视图的segues,因此:

在情节提要上,选择并复制您的主表视图。取消选择并粘贴。创建从主表视图到第二个表视图的推送序列;或从您想从哪里导航到它。根据需要修改第二个表格视图。IE:如果它需要一些 UI 更改没问题。

创建一个新的 viewcontroller 类,它是运行主 tableview 的 viewcontroller 的子类。

覆盖子类中的数据委托以提供所需的数据子集。

回到故事板,选择您的第二个 tableview 控制器,然后在身份检查器中选择您的子类作为自定义类。

为了使该解决方案顺利运行,您的应用确实需要管理视图的数据。您可以使用 prepareforsegue 将数据从第一个 tableview 传递到第二个,但我发现从许多角度来看,应用程序数据模型更加灵活。

除非您有通过 segue 推送到子视图的按钮,否则您的子类将需要覆盖通过带有身份的 segue 推送的函数。NB Segues 必须有唯一的标识符,如果你 id 他们。

解决这个问题需要大量的试验和错误,但是一旦你理解了这个概念,它就会是一个相对顺利的解决方案,具有很强的适应性并且实施起来也不错。

于 2012-04-18T22:20:28.573 回答
3

我不确定视图,但我能够从我的故事板中获取视图控制器的方式如下。

UIViewController *viewController = [self.storyboard instantiateViewControllerWithIdentifier:@"IdentifierName"];

从这里,也许你可以像以前用笔尖一样使用它。

于 2012-04-20T14:59:25.450 回答
0

只需将一个表格视图的转换连接到我想要重用的那个,我就能够重用情节提要中的一个视图。

所以我想重用的tableview被指向两次。它有点工作,但我遇到的问题是在我的应用程序委托中设置一个变量(使用 instantiateViewControllerWithIdentifier)到我正在重用的表视图。似乎如果我重用它,情节提要正在创建我的 tableview 的 2 个实例,而我使用 instantiateViewControllerWithIdentifier 获得的那个不是我想要的。

我不确定这是否是正确的方法。但我认为许多其他人正在以某种方式这样做。使用情节提要中的自定义表格单元格,我怀疑很多人都想重用他们的视图。

于 2011-12-19T17:56:07.790 回答
-1

例如:我们想重用下面显示的情节提要中的视图(包括子视图)。

故事板中我们想要重用的目标视图

到目前为止,我所知道的最佳解决方案是将视图相关代码剪切并粘贴到 New Singe View 文件中,而不会丢失信息。

详细步骤如下

第 1 步:重命名我们想要重用的视图。只需为第 2 步做准备。

第1步

第 2 步:打开故事板作为源代码,以便剪辑我们需要的 XML 代码

第2步

Step 3、4:搜索并剪辑我们需要的代码

第 3 步

第4步

步骤 4.5(不需要):作为 Interface Builder 打开以查看已删除的视图

步骤 4.5

Step 5、6:新建XXX.xib,粘贴我们刚才截取的代码

第 5 步

第 6 步

第 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张截图吗?

于 2019-07-08T12:20:54.567 回答