从子UIView访问父视图

时间:2012-02-05 17:19:24

标签: xcode view uiview uiviewcontroller title

我有一个带有xib的UIViewController并使用Interface Builder我添加了一个子UIView。 在孩子UIView中,当我点击该视图中的一个对象时,我希望能够改变整个窗口的标题。

现在我通常会做那个设置

self.title = @"hi";
父UIViewController上的

。但是,有什么方法可以从孩子中访问父标题吗?

我试过

self.superview.title = @"i";
self.parentViewController.title = @"hi";
但是没有工作。 任何帮助非常感谢

感谢

1 个答案:

答案 0 :(得分:2)

self.superview.title = @"i";评估为UIView类型的对象,而UIView没有title属性。 UIViewController具有parentViewController属性,但UIView没有。

因此,根本问题在于您没有正确地分离控制器和视图类。你通常做的是让你想要抓住UIControl子类的视图(类似UIButton之类的东西),但如果它是一个自定义的UIView子类,那么你可以只需将其更改为UIControl子类,因为UIControl本身是UIView的子类,然后在您的控制器中添加如下内容:

- (void)viewDidLoad
{
    [super viewDidLoad];

    // we'll want to know if the view we care about is tapped;
    // we've probably set up an IBOutlet to it but any way of
    // getting to it is fine
    [interestingView
               addTarget:self
               action:@selector(viewTapped:)
               forControlEvents:UIControlEventTouchDown];

     // UIButtons use UIControlEventTouchUpInside rather than
     // touch down if wired up in the interface builder. Pick
     // one based on the sort of interaction you want
}

// so now this is exactly like an IBAction
- (void)viewTapped:(id)sender
{
    self.title = @"My new title";
}

因此,您明确地不会对视图中任何有关其在视图层次结构中的位置或视图控制器打算如何操作的知识进行投资。如果它收到用户互动,你只是告诉它给你一个喊叫。