如何访问父视图?

时间:2012-07-23 12:05:55

标签: objective-c xcode uiview uiviewcontroller storyboard

我正在尝试从代码访问故事板以便能够使用此行:

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

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

它的设置如下:

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是另一个视图的子视图,所以它无法直接访问故事板,也不知道如何获取该访问权限。

问题2:thisBigView嵌入navigationcontroller,但我再次知道无法访问此BigView,因此我无法访问navigationcontroller

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

- 编辑:我尝试了什么 -

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

但是我只是在'UIView *'

类型的对象上找不到'属性故事板'

2 个答案:

答案 0 :(得分:4)

答案 1 :(得分:3)

将子视图添加为界面构建器中superview的属性(control-拖动到头文件)。然后将UIViewController属性添加到子视图中。在superview的代码中然后执行

nameOfSubView.superViewPropertyName = self;