从子UIView访问父视图

6

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

现在我通常会这样设置

self.title = @"hi";

在父级UIViewController上。但是我能否从子级中访问父级标题?

我尝试过

self.superview.title = @"i";
self.parentViewController.title = @"hi";

但是两者都无法使用。非常感谢任何帮助。

谢谢。

1个回答

3
self.superview.title = @"i";的返回对象类型为UIView,而UIView没有title属性。UIViewController有一个parentViewController属性,但是UIView没有该属性。

因此,根本问题在于您没有正确地分离控制器和视图类。通常情况下,您需要将要捕捉轻拍事件的视图制作成UIControl子类(像UIButton这样的元素已经是UIControl的子类了,但如果它是自定义的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";
}

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


谢谢Tommy,现在完美地运行了。如你所建议的,我将所有的onclick控制移动到了控制器中,视图现在只负责绘制。 - user930731
1
UIResponder不是UIView的子类,而是相反的。 - Saurabh G
1
@SaurabhG 的确,我明显打错了 UIResponder,我会进行更正。 - Tommy

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