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