【问题标题】:Is it possible to connect delegate and dataSource of CustomViews in interface builder?是否可以在界面生成器中连接自定义视图的委托和数据源?
【发布时间】:2013-08-03 13:39:00
【问题描述】:

在 Interface builder 中,如果我右键单击 tableView,我会选择委托和 dataSource 出口,有时我们会连接到文件的所有者,在大多数情况下是实现这些协议的视图控制器,

如何为具有委托和数据源属性的自定义视图获得类似的选项?

【问题讨论】:

    标签: ios objective-c


    【解决方案1】:

    您需要满足以下条件:

    1. 视图的Custom Class 应该设置为您在Interface Builder 中的自定义视图的类名(通过身份检查器)。如果您的委托或数据源对象也是自定义视图,还要确保设置了该视图的自定义类
    2. 自定义类的@interface 应使用IBOutlet 装饰其委托和数据源属性。例如,@property (nonatomic, weak) IBOutlet id <SomeProtocol> delegate;
    3. 如果您为委托或数据源声明了协议,则应将要用作委托或数据源的目标对象声明为实现该协议

    【讨论】:

    • 我错过了第二个条件!
    • 是的,IBActionIBOutlet 只是Interface Builder 用来确定哪些变量/属性允许连接出口或操作的预处理器宏。它们对编译后的代码没有任何影响。
    • 那么它还应该显示其他属性是 IBOutlets 吗?
    • 应该是,如果它们被正确声明。
    • 如何在 swift 中输入 nr 2?
    【解决方案2】:

    创建您的自定义委托,

    @objc protocol CustomDelegate: class {
    func itemSelected(_ success: Bool)
    }
    

    创建自定义委托的自定义类和属性(确保在属性声明期间添加@IBOutlet),

    class CustomView: UIView {
    @IBOutlet weak var cDelegate: CustomDelegate!
    //...
    //...
    //...
    }
    

    现在,转到要添加此自定义视图的情节提要,获取 UIView 并更改类,然后右键单击它,您将能够看到您声明的属性(“cDelegate”)。看图更好理解,

    【讨论】:

      【解决方案3】:

      您可以按照以下步骤来实现。

      1. 创建新的 UIview 子类
      2. 在 .h 文件中设置 tableview 委托和数据源属性,如

        UIViewController

      3. 然后在您的 .m 文件中实现委托和数据源协议。像往常一样。

      4. 好的。现在在您的视图控制器中将视图拖入界面构建器或以编程方式创建实例。

      5. 将视图的类设置为您创建的子类。 (在界面生成器右侧);

      6. 然后在这个视图中放置一个 UITableView。并将连接拖到其父 UIview 并选择数据源和委托。

      7. 现在一切都完成了,您的 UIview 子类将充当 tableview 的数据源和委托..

      【讨论】:

        猜你喜欢
        • 2012-06-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多