如何在从XIB实例化的自定义视图上设置属性

我只是试图在Objective C和IOS中讨论MVC,但我遇到了一个问题,我希望有人可以帮助我。

我创建了一个自定义视图(在XIB中创建为子UIView),它使用简单的委托协议从drawRect中的委托中请求信息。 我有一个视图控制器,它实现协议并通过接口构建器连接到视图。 自定义视图还有一些我想在启动时设置的属性。 我遇到的问题是弄清楚控制器应该如何访问视图以设置这些属性,因为它似乎没有直接访问它。 此外,这些属性似乎在界面构建器检查器中不可见,正如我所期望的那样,与我添加的委托属性不同。

最初我以为我可以做点什么

[self.view setViewIntProperty:10] 

但是这将调用主XIB视图,我的自定义视图实际上是此视图的子视图,所以我需要一些特定的子视图,我可以从viewDidLoad中的控制器初始化它。

希望这很清楚。 我确信这应该很容易,我错过了一些简单但却看不出这应该如何正常工作的东西。

您的自定义视图的属性(与其出口相对)只能在代码中设置,除非您为其创建IB插件 。

如果您在控制器中为每个子视图创建一个sockets,则可以轻松访问其他子视图。 视图sockets作为该视图控制器的主视图。 没有什么可以阻止您为其他视图/控件创建其他sockets。 Yu只需要子视图视图控制器并根据需要添加sockets。 只需记住将控制器的类名(在Interface Builder中)设置为自定义子类的类名。 这将揭示您可以连接的可用sockets。

如果要在IB的检查器调色板中使控件的自定义属性可用,则仍需要创建Interface Builder插件。 除非您计划在其他应用程序中频繁地重复使用它或将其提供给其他应用程序,否则最简单的方法就是在源代码中设置属性。

您可以在MyCustomView *类型的视图控制器上创建另一个属性。

将该属性声明为IBOutlet,然后在IB中将其连接起来。

然后在视图控制器中,您可以使用该属性访问该自定义视图。

从xib设置自定义子视图(在我的例子中为UIButton的子类)的角半径的示例。

  1. 创建这样的属性

     @property (nonatomic, assign) IBInspectable CGFloat cornerRadius; 
  2. 在自定义视图的实现文件中覆盖setter。

     -(void)setCornerRadius:(CGFloat)cornerRadius { self.layer.cornerRadius = cornerRadius; } 
  3. 在xib中拖动视图并将其类更改为自定义类。 在此处输入图像描述

  4. 魔术……您将看到属性检查器中出现的自定义属性,如下所示。 在此处输入图像描述