iOS : UI - Design login page and Tab view - Tab not coming after Login

标签 ios user-interface view tabs

我是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 指示,

  1. 我使用选项卡式模板创建了一个新项目。
  2. 将 LoginViewController 屏幕添加到 Storyboard 并为其指定 ID -“loginViewController”。
  3. 为主选项卡 Controller 的 LoginViewController 和 MC_MainTabBarController 创建了类。
  4. 将 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/

相关文章:

database - MVC4如何获取外键代表的值

ios - 如何在iOS中集成whatsapp

Java - 如何创建一个矩形生成方法,以生成多个具有不同坐标的矩形?

python - 在 pyqt5 上每次点击时使按钮标签发生变化

user-interface - 完全由键盘驱动的用户界面

java - 使用 BottomNavigationView 在它们之间切换时保留 fragment 状态

ios - 检测哪个特定的 map 图钉被触摸

ios - 在 iOS 7 上运行 32 位 arm,在 iOS 8 上运行 64 位

javascript - webview 与 native iOS 应用程序通信的任何方式?

dom - 将其他 DOM 元素添加到 Backbone 中的 View