如何获取父视图访问权限?

4

我想从代码中访问故事板以便使用以下行:

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

}

这是我在地图视图控制器中使用的代码来响应注释公开点击事件,并且希望在这里也使用它,但是我有两个问题!
问题1:因为thisSmallView是另一个视图的子视图,所以它无法直接访问故事板并不知道如何获取该访问权限。
问题2:thisBigView嵌入了一个导航控制器,但是同样,我不知道如何访问thisBigView,因此无法访问导航控制器。
(我认为如果我能解决问题2,那么自动解决问题1?)
--编辑:我尝试的--
DetailViewController *detail = [self.superview.storyboard instantiateViewControllerWithIdentifier:@"detail"];   

但是我收到了“在UIView*类型的对象上找不到属性storyboard”的错误提示。

2个回答


3

在界面构建器中将子视图作为父视图的属性添加(通过控制键拖动到头文件)。然后,在子视图中添加一个UIViewController属性。接下来在父视图的代码中执行以下操作:

nameOfSubView.superViewPropertyName = self;

我觉得那可能会起作用!太棒了 :D!我现在会尝试它,然后告诉你它是否奏效,并当然会点赞/接受答案! :) - Spyral
可以正常工作,只是我不需要创建一个UIView属性,而是需要创建一个UIViewController属性。不过还是谢谢!: ) - Spyral
哦,你说得对,我没有注意到你正在使用视图控制器。只要你知道,苹果不推荐使用多个视图控制器来控制同一视图区域的内容。在头文件中,你可以将你的类更改为UIView,并更改一些启动方法。不确定是否会被拒绝,但你可能需要考虑进行更改。 - Dustin
我并没有真正为同一个视图使用多个视图控制器吧?子视图是一个UIView,父视图控制器是一个UIViewController。我只需要让子视图向其父视图控制器请求一些东西^^,这样问题就解决了。但是我并没有真正为同一个视图使用多个视图控制器,对吧? - Spyral
所以你想要访问父视图控制器,没问题。 - Dustin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接