访问当前视图的父视图 - iOS

51

当我想要访问当前UIView的父级UIView时,我在当前的UIView中声明了父级UIView对象,并通过将父级UIView对象分配给当前视图的对象属性来访问它。

有没有什么方法可以摆脱这个过程,直接调用父视图的方法或属性?

我还尝试过(parentView *) self.view.superview,但没有帮助。

在调用此对象的函数时会出现错误。

[UIVIew unrecognized selector......
3个回答

95
如果您直接从UIView调用此函数(而不是UIViewController),则应该使用self.superview而不是self.view.superview

它是UIViewController。但我猜对于UIView也不应该起作用,因为对象是相同的,两者都是UIView。 - Naveed Rafi
2
请注意,此代码在 ViewDidLoad 中返回 nil。只有在 viewDidAppear 中及之后才能使用。 - Nico teWinkel

0

@ Naveed:无论是父视图还是子视图,这是您可以在任何视图上使用的通用代码,只需更改您想要按下的按钮名称和您要进入的视图名称即可。例如,在按返回按钮时,您要进入图书馆视图,然后编写此代码-

-(IBAction)backButtonPressed:(id) sender
 {
        llibraryView *libraryview=[[libraryView alloc] initWithNibName:nil bundle:nil];
    libraryview.modalTransitionStyle=UIModalTransitionStyleCoverVertical;
    [self presentModalViewController:libraryview animated:YES]; 
    [libraryview release];
 }

请告诉我您的问题是否已解决。


非常感谢您的帮助,Archana。实际上我的问题是我不想要固定的视图名称,我想让它变得动态。谢谢。 - Naveed Rafi

0
我所想的是你想从添加到视图控制器视图中的View中调用视图控制器的方法。
现在你有两个选项,要么将你的视图控制器设置为你的视图的代理,然后使用[delegate performSelector:]方法调用你的视图控制器的方法。
另一种方法是访问你的视图的superview,然后获取它的控制器。你不能直接这样做,因为如果你这样做了,就会失去MVC的整个目的。
但是,还有一种方法,给你:Get to UIViewController from UIView? 希望这能帮助你。

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