【问题标题】:In storyboard, how to assign a view controller's subview a different delegate/controller m file?在情节提要中,如何为视图控制器的子视图分配不同的委托/控制器 m 文件?
【发布时间】:2012-05-10 16:57:43
【问题描述】:

在我的故事板中,我有一个嵌套在视图控制器场景中的视图(UIScrollView 的一个子类,称为 AQGridView)。我想为 AQGridView 分配一个控制器委托和数据源,它们在单独的 .m 和 .h 文件中定义,而不是父视图控制器。我该怎么做呢? Storyboard 只允许我将连接器拖到 AQGridView 的父视图控制器。

编辑: 我试过在父视图控制器中做这样的事情(其中 myGrid 是一个指向 AQGridView 的 IBOutlet,而 myGridController 是父视图控制器的属性):

- (void)awakeFromNib
{
  // note: kzMyGridController is a subclass of AQGridViewController
  myGridController = [[kzMyGridController alloc] init];
  myGrid.delegate = myGridController;
  myGrid.dataSource = myGridController;
}

但它似乎没有工作,因为它的委托方法都没有被调用。我做错了什么?

【问题讨论】:

    标签: objective-c ios xcode uistoryboard


    【解决方案1】:

    如果不允许您使用 StoryBoard,只需在代码上执行即可。这更有意义,因为它实际上强制您拥有一个对象(委托)并在需要时设置它。


    应该是:

    - (void)awakeFromNib
    {
      // note: kzMyGridController is a subclass of AQGridViewController
      myGridController = [[kzMyGridController alloc] init];
      myGrid.delegate = myGridController;
      myGrid.dataSource = myGridController;
    }
    

    【讨论】:

    • 我添加了一个解释,描述了我如何以编程方式尝试它。还是不行。
    • 抱歉,打错了。我想我已经弄明白了……在初始化 AQGridView 之前调用了 awakefromnib 方法。
    • 当只需要一个时,这不是一次实例化两个视图控制器吗?这是在父级的 awakeFromNib 中创建一个新的视图控制器。在情节提要中创建两个不同的场景并实例化您需要的场景不是很有效吗?
    【解决方案2】:

    答案是我必须在 AQGridView 上调用 reloadData。视图是在其委托之前创建的,因此它的初始数据获取方法在没有接收器的情况下触发。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-02
      • 1970-01-01
      • 1970-01-01
      • 2019-02-22
      • 2013-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多