我正在开发应用程序,它涉及签名过程。它是标签栏应用程序,但为了简单起见,我将使用只有2个标签的示例。家庭和设置。
在家中,用户会在主屏幕上看到各种照片和最后消息。 但是,当用户未登录时,会出现默认的匿名视图。
我的问题是,你们如何使用一个视图控制器和两个不同的复杂视图。启动app后,主视图控制器是默认的。我正在使用故事板,所以只有一个viewcontroller可以是HomeViewController。(显然:))
我知道在一个视图控制器上执行多个UIViews并基于全局变量隐藏/显示这些视图的可能性(NSUserDefaults)。问题是,两种观点都有很多出路。 (Scrollviews,tableviews等)。因此,对于其中一个,在UIView上编程所有这些出口将是硬核,并且会有很多冗余。 (登录用户将登录,但必须下载所有UIViews的数据 - 包括未注册用户的视图)。
根据用户是否登录,创建两个视图控制器并显示一个视图控制器会更容易。(只需在appdelegate的applicationdidfinishloading中检查NSUserDefaults字典)
答案 0 :(得分:1)
您可以实现,以便HomeViewController
是一个控制许多视图控制器的控制器。与UINavigationController
和UITabViewController
控制多个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。