0

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

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

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

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

4

1 回答 1

0

有几种不同的方法可以做到这一点。这仅取决于您想要实现的外观。

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

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

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

正如您所描述的那样,任何地方都不存在视图控制器的“堆栈”。您必须自己创建一个,可能在应用程序委托中。

为此,您需要创建对视图控制器的引用,您需要在应用程序委托中为其提供指针,为其创建一个属性,然后对其进行综合。它看起来像这样:

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]

希望对您有所帮助。

于 2013-05-09T21:18:44.570 回答