基于全局变量的变换视图控制器

时间:2013-04-16 13:21:25

标签: iphone ios uiviewcontroller uitabbarcontroller

我正在开发应用程序,它涉及签名过程。它是标签栏应用程序,但为了简单起见,我将使用只有2个标签的示例。家庭和设置。

在家中,用户会在主屏幕上看到各种照片和最后消息。 但是,当用户未登录时,会出现默认的匿名视图。

我的问题是,你们如何使用一个视图控制器和两个不同的复杂视图。启动app后,主视图控制器是默认的。我正在使用故事板,所以只有一个viewcontroller可以是HomeViewController。(显然:))

我知道在一个视图控制器上执行多个UIViews并基于全局变量隐藏/显示这些视图的可能性(NSUserDefaults)。问题是,两种观点都有很多出路。 (Scrollviews,tableviews等)。因此,对于其中一个,在UIView上编程所有这些出口将是硬核,并且会有很多冗余。 (登录用户将登录,但必须下载所有UIViews的数据 - 包括未注册用户的视图)。

根据用户是否登录,创建两个视图控制器并显示一个视图控制器会更容易。(只需在appdelegate的applicationdidfinishloading中检查NSUserDefaults字典)

2 个答案:

答案 0 :(得分:1)

您可以实现,以便HomeViewController是一个控制许多视图控制器的控制器。与UINavigationControllerUITabViewController控制多个viewControllers以及viewController可见的方式相同。

你的HomeViewController看起来像这样:

@interface HomeViewController : UIViewController

@property (strong, nonatomic) UIViewController *authenticatedVC;
@property (strong, nonatomic) UIViewController *anonymousVC;

- (void)showAuthenticatedView;
- (void)showAnonymousView;

@end

@implementation HomeViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    // init your VCs
    self.authenticatedVC = [[UIViewController alloc] init];
    self.anonymousVC = [[UIViewController alloc] init];

    // show your initial VC (assuming anonymousView is you default)
    [self.view addSubview:self.authenticatedVC.view];
}

- (void)showAuthenticatedView
{
    // remove current view
    [self.authenticatedVC.view removeFromSuperView];

    // display authenticatedView
    [self.view addSubview:self.authenticatedVC.view];
}

- (void)showAnonymousView
{
    // remove current view
    [self.authenticatedVC.view removeFromSuperView];

    // display showAnonymousView
    [self.view addSubview:self.anonymousVC.view];
}

@end

**更新: 这是来自ios dev lib的关于创建自定义容器视图控制器的链接:http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/CreatingCustomContainerViewControllers/CreatingCustomContainerViewControllers.html

答案 1 :(得分:0)

我会这样做。你有两个ViewController,一个是DefaultViewController,另一个是LoginViewController。检查登录与否,并将rootViewController设置为要显示的viewController。

顺便说一句,当你想存储用户信息如id和密码时,请使用keychain而不是NSUserDefaults。