【问题标题】:iOS : Setting actions, datasources and delegates not to the file's owneriOS:设置动作、数据源和委托不给文件的所有者
【发布时间】:2013-02-14 20:05:24
【问题描述】:

也许这是两个不同的问题,但它们基本上问的是同一件事。 我有一个单视图应用程序,在我的屏幕上我有一个Table View 和一个Collection View

1)我想为我的表格视图和我的集合视图提供一个datasource(当然还有delegate),但我不希望它在同一个(主)ViewController文件中(目的是更清晰的代码)。但是界面生成器只允许我声明为datasource(和delegate)文件的所有者,即视图控制器。我怎样才能做到这一点?以编程方式声明是否正确?如果是这样,应该在哪里完成?或者,也许将数据源(和委托)与 ViewController 分开不是最佳做法?

2)在我的表格视图的自定义单元格中,我有一个按钮,我不想在同一个地方(文件)处理按钮的操作,我处理行选择(委托 obj)。但是再一次,IB 只让我将操作连接到自定义单元类。如何将操作连接到另一个地方?

提前感谢您的回答,

【问题讨论】:

    标签: ios xcode delegates interface-builder datasource


    【解决方案1】:

    问题一:

    但是界面生成器只允许我声明为数据源(并且 delegate) 文件的所有者,即视图控制器。

    问题 2:

    但是再一次,IB 只让我将动作与 自定义单元格类。如何将操作连接到另一个地方?

    两者都有相同的答案:

    您可以通过从界面生成器中选择来更改类。

    【讨论】:

    • 我不想更改它的类我只想将数据源(和委托)和按钮操作分配给不同的类
    • 你违背了设计模式。 MVC 你将在多个文件上共享控制器,但不完全。
    • @anoop:你能详细说明一下吗?如果我在我的超级视图中为不同的视图有一个单独的控制器不是更好吗?与其把一个控制器类做得很大,拆分它不是更好吗?
    • 有时。但是在一个给定的 3 个按钮视图中,一些类作为其他 2 个按钮的委托,用于其他的 tableview。你周围不是乱七八糟的Controller吗?让它变得简单。
    【解决方案2】:

    您应该使用对象库中的对象(蓝色立方体)。拖放到文件所有者所在的部分(文档大纲)。然后在身份检查器中将其设置为您想要的类(比如Outsider)。这将允许您将Outsider 对象设置为委托/数据源,并且还允许您在那里编写IBAction
    诀窍是通过在 xib 中创建一个对象来使该对象(类)在 xib 中可见(这将在加载 nib 时完成)。

    另外,以编程方式设置委托或数据源并没有错,但是通过接口构建器更方便。

    【讨论】:

    • 谢谢,这是一个很好的解决方案。我从来没有说过以编程方式执行此操作是不好的。我来自 Android 世界,在那里我从未使用过诸如 Interface builder 之类的收费,只有代码,这就是为什么我对它的功能有点困惑:)
    • 好吧。甚至我也曾经求助于代码来完成我可以通过 IB 完成的事情。但后来通过IB意识到它更方便。 :)
    【解决方案3】:

    1) 以编程方式进行。编写您自己的委托并在代码中分配它。清洁剂。

    2) 在 ViewController 类中连接按钮的操作。这很干净,这就是视图控制器的用途。打开助手编辑器,将“箭头”拖到头文件中。

    【讨论】:

    • 1) 我应该在哪里进行作业?在viewDidLoad 方法上?
    • 2) 按钮执行的操作在逻辑上类似于选择整行,这就是为什么我不想将它们都包含在同一个类中,有没有办法做到这一点?
    • 那很好...虽然我认为它已被弃用,所以您也可以使用viewWillAppear...
    • 选择和按钮按下应该在视图控制器中完成。那是你应该放置两个 IBAction 的地方。
    • viewDidLoad 未被弃用。它的viewDidUnload 已被弃用。
    猜你喜欢
    • 1970-01-01
    • 2012-07-01
    • 1970-01-01
    • 2012-02-03
    • 2016-02-29
    • 1970-01-01
    • 2015-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多