访问包含来自父 ViewController 的 UIView 组件

Posted

技术标签:

【中文标题】访问包含来自父 ViewController 的 UIView 组件【英文标题】:Access contained UIView component from Parent ViewController 【发布时间】:2015-09-14 20:51:37 【问题描述】:

在我的父视图控制器中,我有一个视图容器,我向它添加了一个子视图:

    m_cardDetail  = [[CardDetailView alloc] init];
    [_m_viewContainer addSubview:m_cardDetail];
    [m_cardDetail initialize];

但是如何让我的父视图控制器处理按钮单击(按钮位于 m_cardDetail 子视图中)。我尝试将按钮的按钮标签属性设置为 1010 并在父视图控制器中使用此代码:

    UIButton *aButtonView = (UIButton *)[m_cardDetail viewWithTag:1010];
    [aButtonView addTarget:self action:@selector(aButtonTapped:) forControlEvent:UIControlEventTouchUpInside];

并且还在视图控制器中添加了这个:

    - (void) aButtonTapped:(UIButton *) sender 
        //Do something
    

但我得到了无法识别的选择器错误

【问题讨论】:

你可以做一个自定义委托来做到这一点。 like in this article 【参考方案1】:

您应该将另一个视图控制器的视图视为私有视图,即使是子视图控制器也是如此。正如@Ostanik 在他的回答(已投票)中建议的那样,设置协议和委托是在父母和孩子之间建立联系的好方法。

请注意,嵌入转场是设置父/子链接的一种非常简洁的方式。您只需在 IB 中创建一个容器视图,然后从容器视图控制拖动到您希望成为子视图的视图控制器的场景,其余的由 Xcode 完成。加载父视图控制器时,将调用嵌入 segue,您可以在 prepareForSegue 方法中设置委托。

【讨论】:

以上是关于访问包含来自父 ViewController 的 UIView 组件的主要内容,如果未能解决你的问题,请参考以下文章

访问父控制器中的函数

使用来自其他 viewController 的 Alamofire 从 JSON 中取出 HTML 标签

来自 AppDelegate 的当前 viewController 崩溃/空屏

使图像可从其他 ViewController 访问

访问视图来自另一个类的Controller元素

如何从 XIB 文件访问 ViewController 中的 IBoutlet