如何从另一个类访问superview?

时间:2011-08-09 19:58:13

标签: iphone objective-c ios cocoa-touch

所以我有一个应用程序,我正在实现一个通用工具栏,有点像标签栏+工具栏,并在我的所有视图控制器上都有特色。我有一个自定义工具栏,其中有一些按钮可以操作我在App Delegate中创建的一些导航视图控制器。但是,我无法使这些按钮工作,下面是我正在使用的其中一个按钮的动作方法示例:

    Test_ClassAppDelegate *test_ClassAppDelegate = (Test_ClassAppDelegate*)[[UIApplication sharedApplication] delegate];
[[[test_ClassAppDelegate window] superview] removeFromSuperview];
[[test_ClassAppDelegate window] addSubview:[[test_ClassAppDelegate helpNavController]view]];
[test_ClassAppDelegate release];    

我认为我可能出错的主要区域是在我的第二行,我正在删除我的超级视图。我甚至不确定这是否是正确的方法。我知道我可以在app委托本身中实现这个代码,但我很好奇是从其他地方删除s​​uperview,或者如果其他人看到这个代码有任何问题。感谢。

1 个答案:

答案 0 :(得分:0)

是的,那条线肯定是个问题......

来自UIWindow reference

  

窗口是视图层次结构中的根视图。

因此,一个窗口没有superview,您要求window的{​​{1}}将自己从 superview中删除。这不起作用,因为它是如此的绕口令 - 它只是没有意义。

此外,superview不会删除超级视图,会从 中删除您要向其发送-removeFromSuperview 的视图 superview。 你看到了区别吗?

听起来您想要根据用户选择更改根视图控制器。如果是这种情况,请参阅我对this question的回答,以及很多其他人的回答。