在堆栈上获取指向控制器的指针

时间:2013-05-09 20:24:42

标签: ios ios5 uiviewcontroller uitableview

我有一个左视图控制器(滑动菜单控制器)正在使用,例如名为LeftMenuTableViewController。

当用户注销时,会显示模态视图控制器,但是tableview控制器会保留在后台。当他们登录时,控制器被解雇,其他人再次显示。

如何执行以下操作: 1.检查表视图控制器是否存在于堆栈中。 2.在没有alloc init(创建另一个)的情况下在堆栈上创建指向此控制器的指针

我需要一个指向它的指针,以便我可以在登录后加载tableView reloadData方法,如果它存在于堆栈上。

1 个答案:

答案 0 :(得分:0)

有几种不同的方法可以做到这一点。这取决于你想要达到的外观。

我认为最好的方法是使用带有两个容器视图的UIViewController,然后将登录视图控制器嵌入到一个容器视图中,将tableview控制器嵌入另一个容器视图中。

在视图控制器中创建对这些容器的引用后,您可以根据需要设置每个容器视图的动画,例如滑出登录视图然后隐藏它。这样,您的“主”视图控制器将始终具有对tableView控制器和登录视图控制器的引用。

如果您不想放弃在视图控制器之间使用模态转换的方法,我告诉您:

在您描述的任何地方都不存在视图控制器的“堆栈”。你必须自己创建一个,可能在app delegate中。

为了做到这一点,你需要创建一个对视图控制器的引用,你需要在你的app委托中指针,为它创建一个属性,然后合成它。它看起来像这样:

MyAppDelegate.h

@interface MyAppDelegate : UIResponder
{
    MyViewControllerClass *myViewController;
}
@property (nonatomic) MyViewControllerClass *myViewController;

MyAppDelegate.m

@synthesize myViewController;

然后,在视图控制器的viewDidLoad方法中....

[[[UIApplication sharedApplication] delegate] setMyViewController:self];

设置完毕后,您可以通过说

来检查是否存在指向该视图控制器的指针
if([[UIApplication sharedApplication] delegate].myViewController)
{
    //does exist
}
else
{
    //does not exist
}

要访问该视图控制器上的方法,只需说出

之类的内容
[[[UIApplication sharedApplication] delegate].myviewController performMyMethod]

希望对你有所帮助。