我是iOS开发的新手。我想创建 2 个屏幕 - (1) 登录和成功登录 (2) 基于选项卡的 View 。
我开始在 Storyboard中创建登录文本框和登录按钮。现在,如何创建其他选项卡 View 并在登录时单击显示新选项卡 View 。
创建此类屏幕的最佳方法是什么?在教程中,我可以找到将选项卡式 View 创建为主视图或动态 View 。找不到我要找的路。仅供引用,我希望我的应用程序与 iOS 4 及更高版本兼容。我希望相应地计划和使用资源。分享这一点,以防它影响要选择的方法。
谢谢
再次更新: 如答案所示/建议,我创建了一个新项目作为 TabbedView 并将 LoginViewController 添加到 Storyboard。在我的 LoginViewController 中的“身份检查器”下 - 身份 - StoryboardID - 给出了名称“loginViewController”。为 TabControl 创建自定义类 - MC_MainTabBarController。 我的 Storyboard文件名为 Main_iPhone.storyboard。 在我的 AppDelagate 文件中,在返回之前的 didFinishLaunchingWithOptions 方法中,我添加了:
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil];
// MY First View of Tab
MC_ChatViewController *chatViewTab = [[MC_ChatViewController alloc] init];
// MY TabController class
MC_MainTabBarController *tabCtrler = [[MC_MainTabBarController alloc] init];
// Login view controller
LoginViewController *loginViewController = [storyboard instantiateViewControllerWithIdentifier:@"loginViewController"];
[loginViewController setModalPresentationStyle:UIModalPresentationFullScreen];
[tabCtrler presentViewController:loginViewController animated:NO completion:nil];
这应该首先显示登录屏幕,然后显示选项卡,但它直接显示选项卡并且没有登录屏幕。我觉得我可能在两个地方出错 - “Main_iPhone”或者我可能还必须在其他地方将 loginViewController 设置为 Storyboard id。哪里拿不到?
更新
即使在调用 tabCtrler PresentViewContorller ...之后,登录屏幕仍然没有显示。然而,直标签仅可见。在运行时,我看到以下警告:
Warning: Attempt to present <LoginViewController: 0x8ab4e80> on <MC_MainTabBarController: 0x8d4dc20> whose view is not in the window hierarchy!
更新 通过 AppDelegate 中 didFinishLaunchingWithOptions 中的以下代码,我可以获得登录页面。
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil];
MC_MainTabBarController *tabCtrler = [[MC_MainTabBarController alloc] init];
LoginViewController *loginViewController = [storyboard instantiateViewControllerWithIdentifier:@"loginViewController"];
[[[[UIApplication sharedApplication] delegate] window] setRootViewController:loginViewController];
现在,从 Login -submitBtnClick 中,如何进入默认选项卡 View ?这应该在登录类的submitBtnClick 或AppDelegate 中处理。如何达到同样的效果?
请帮忙将登录屏幕置于选项卡之前。
谢谢
最佳答案
感谢BoranA和所有 friend ,
我必须扩展 BoranA 的答案才能使其发挥作用,因此我分享对我有用的解决方案。 AS BoranA 指示,
- 我使用选项卡式模板创建了一个新项目。
- 将 LoginViewController 屏幕添加到 Storyboard 并为其指定 ID -“loginViewController”。
- 为主选项卡 Controller 的 LoginViewController 和 MC_MainTabBarController 创建了类。
- 将 Storyboard ID 添加到选项卡 Controller 作为“mainView”。
在AppDelgate.h中,添加了loggedIn和tabController对象的属性
@property (nonatomic) bool isLoggedIn;
@property(nonatomic,strong)MC_MainTabBarController *tabBarController;
在 AppDelegate.m 中:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
// Show Login view if not logged On
if (!self.isLoggedIn) {
[self showLoginScreen:NO];
}
return YES;
}
-(void) showLoginScreen:(BOOL)animated {
// Get login screen from storyboard and present it
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil];
LoginViewController *loginViewController = [storyboard instantiateViewControllerWithIdentifier:@"loginViewController"];
[self.window makeKeyAndVisible];
// Show the Login Screen
[self.window.rootViewController presentViewController:loginViewController animated:animated completion:nil];
}
-(void) logout {
// Remove data from singleton (where all my app data is stored)
//[AppData clearData];
// Reset view controller (this will quickly clear all the views)
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil];
// Create the tabBarController using Storyboard ID
self.tabBarController = (MC_MainTabBarController *)[storyboard instantiateViewControllerWithIdentifier:@"mainView"];
// Show the Tab Bar Controller
[self.window setRootViewController:self.tabBarController];
// Show login screen
[self showLoginScreen:NO];
}
最后,在 LoginViewController.m 中,当我完成所有过程并必须显示主视图时,我调用以下方法:
-(void) loginWasSuccessful {
// Send Notification
[[NSNotificationCenter defaultCenter] postNotificationName:@"loginSuccessful" object:self];
// Dismiss Loginscreen
[self dismissViewControllerAnimated:YES completion:nil];
}
// LOGIN BTN CLICKED
- (IBAction)loginBtnClicked:(id)sender {
// Validate & Process Login
// If user is logged successfully, then only go to the main view.
if (self.processLogin)
[self loginWasSuccessful];
}
使用此代码,如果 isLoggedIn 如果 AppDelegate 为 true,那么它将立即显示选项卡 Controller ,并且不会显示登录屏幕。如果 isLoggedIn 为 false,则将出现第一个登录屏幕,成功登录后仅会显示选项卡 Controller 。
希望这可以帮助人们节省时间并解决他们的问题。
谢谢。
关于iOS : UI - Design login page and Tab view - Tab not coming after Login,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22039855/