从chid UIView访问父视图

use*_*731 5 xcode view title uiviewcontroller uiview

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

现在我通常会做那个设置

self.title = @"hi";
Run Code Online (Sandbox Code Playgroud)

在父UIViewController上.但有什么方法可以从孩子内部访问父母标题?

我试过了

self.superview.title = @"i";
self.parentViewController.title = @"hi";
Run Code Online (Sandbox Code Playgroud)

但都没有工作.任何帮助非常感谢

谢谢

Tom*_*mmy 3

self.superview.title = @"i";求值为 类型的对象UIView,并且UIView没有title属性。UIViewControllers 有财产parentViewControllerUIViews 没有。

因此,根本问题是您没有正确分离控制器和视图类。您通常要做的就是使您想要捕获 的子类上的点击的视图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";
}
Run Code Online (Sandbox Code Playgroud)

因此,您明确不要向视图投资任何有关其在视图层次结构中的位置或视图控制器打算如何操作的知识。您只需告诉它在收到用户交互时向您大声喊叫即可。