【问题标题】:How do I get acces to the parent view?如何访问父视图?
【发布时间】:2012-07-21 16:03:17
【问题描述】:

我正在尝试从代码中访问情节提要以便能够使用这一行:

DetailViewController *detail = [self.storyboard instantiateViewControllerWithIdentifier:@"detail"];

我在我的地图视图和列表视图中使用它,但想在其他地方使用它。 问题是这个视图是另一个视图的子视图。

设置如下:

thisBigView 是我在故事板中添加的视图,它是 ThisBigViewController 在情节提要中,我向该视图添加了另一个视图,我们称之为 thisSmallView。类设置为ThisSmallView

ThisSmallView 是一个自定义视图,我在该视图中动态生成按钮。这些按钮调用以下操作:

-(void) radarEventClick:(UIButton *)sender{
    SingletonManager *sharedManager = [SingletonManager sharedManager];

    DetailViewController *detail = [self.storyboard instantiateViewControllerWithIdentifier:@"detail"]; // PROBLEM 1

    Event *a;
    for(int i = 0; i < [sharedManager.eventsManager count]; i++){
        if(sender.tag == ((Event*)([sharedManager.eventsManager objectAtIndex:i])).id_nr){
            a = [sharedManager.eventsManager objectAtIndex:i];
            break;
        }
    }

    [detail setEvent:a];

    [self.navigationController pushViewController:detail animated:YES];    // PROBLEM 2

}

这是我在 mapviewcontroller 中用于响应 annotationdisclosure 点击的代码,并想在这里使用它,但我有 2 个问题!

问题 1:因为 thisSmallView 是 anotherview 的子视图,所以它无法直接访问情节提要,也不知道如何获得该访问权限。

问题 2:thisBigView 嵌入在 navigationcontroller 中,但同样,我不知道谁可以访问 thisBigView,所以我无法访问 navigationcontroller

(我想如果我能解决问题2,我会自动解决问题1?)

-- 编辑:我尝试过的--

DetailViewController *detail = [self.superview.storyboard instantiateViewControllerWithIdentifier:@"detail"];   

但是我只是得到'在 UIView* 类型的对象上找不到属性故事板'

【问题讨论】:

    标签: objective-c xcode uiview uiviewcontroller storyboard


    【解决方案1】:
    【解决方案2】:

    在界面生成器中添加子视图作为父视图的属性(控制拖到头文件)。然后将UIViewController 属性添加到子视图。然后在superview的代码中做

    nameOfSubView.superViewPropertyName = self;
    

    【讨论】:

    • 我认为这可能行得通!不错:D!我现在就试一试,告诉你它是否有效,当然也支持/接受答案! :)
    • 有效,除了我不需要创建 UIView 属性而是 UIViewController 属性。不过还是谢谢!:)
    • 哦,你是对的,我没有看到你在使用视图控制器。就像您知道 Apple 建议不要使用多个视图控制器来控制同一视图区域中的内容一样。您可能只需在头文件中将您的类更改为UIView 并更改一些启动方法。不确定你是否会因此被拒绝,但你可能想考虑改变。
    • 我并没有真正为同一个视图使用多个视图控制器?子是 UIView,父是 UIViewController。我只需要让孩子向它的父母问东西^^并且这解决了它。但我并没有真正为同一个视图使用多个视图控制器,是吗?
    • 所以你想访问父视图控制器陷阱。你很好。
    猜你喜欢
    • 1970-01-01
    • 2012-10-26
    • 2014-05-17
    • 2013-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-16
    相关资源
    最近更新 更多