+-
在Xcode / Swift中使用预设置视图

假设,我在Xcode的Storyboard中以某种方式设置了一个视图。我还为该视图编写了一个UIView子类 - “CustomView”。此CustomView具有与故事板中的UIView所包含的元素相对应的属性。

首先,我可以以某种方式将CustomView子类的属性连接到Storyboard中视图的UI元素(视图中有标签,图像等)吗?

我知道我可以创建IBOutlets。但我认为将所有视图的元素连接到一个VC并不是那么有效,因为我在UIStackView中堆叠了相同的CustomViews(总体而言,UIStackView中有三个CustomView)。

如果没有,以编程方式设置这些元素的最有效方法是什么(我想通过API设置属性的值,因此每个CustomView看起来都一样,但它的元素会有不同的值)。我不想通过代码创建我在故事板中完全设置的视图,因为添加约束和布局子视图将是一个巨大的痛苦(即使我知道可以这样做)。

1
投票

好吧,我想你要问的是你有一个带有stackview的uiview,MyCustomUIView。您希望在同一个视图控制器MyViewController上重复使用此视图三次,并每次将不同的数据加载到其中。那是对的吗?

如果这是您想要的设置,那么您将所有出口设置为MyCustomUIView。在MyViewController上,为三个视图(view1,view2,view3)创建三个出口,然后以编程方式将MyCustomView加载到每个视图(view1,view2,view3)中,然后从这些视图中访问标签和其他出口,如view1.label, view2.label等。如果你使用xib而不是storyboard顺便说一句,这将更容易/更清洁。我个人会这样做,但如果您的项目是基于故事板的,您可以将MyViewController保留在故事板上并为MyCustomUIView创建一个xib,然后按照我上面的描述加载它。

你可以在故事板中设置它的另一种方法是在MyViewController上使用UITableView,其中包含3个单元而不是你的三个UIViews。通常,由于许多原因,这将是重用视图的首选方式。一个原因是如果您想要4个视图,或者只有2个视图,则更改非常简单。您不必更改MyViewController上的所有UI /约束。

为了解决您对程序性约束的担忧......是的,它们很痛苦。然而,Apple添加了可用于简化程序布局约束的锚点:https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UILayoutGuide_Class_Reference/index.html#//apple_ref/doc/uid/TP40015257-CH1-DontLinkElementID_13

或者您可以使用PureLayout cocoapod进一步简化事情:https://github.com/PureLayout/PureLayout

ADDITONAL INFO

如果使用xib并以编程方式添加它,您将执行以下操作:

创建一个Cocoa Touch类文件qazxsw poi

在下一个屏幕上,使它成为UIViewController并选中“还创建一个XIB文件”。 enter image description here

然后在MyViewController中:

enter image description here

除了在评论中提到的使用tableview或collectionview之外,我实际上不知道如何在没有xib的情况下在故事板中拥有可重用的视图(或者如果可能的话)。也许如果有可能别人会回复:)

现在您已经掌握了这些基本信息,如果您仍然感到困惑,请进行一些关于xib的谷歌搜索。搜索堆栈溢出“add xib swift”也会发现很多结果。当然,如果您有更多问题,请回复!