【问题标题】:Switch views in empty application without storyboard在没有情节提要的空应用程序中切换视图
【发布时间】:2014-06-19 15:35:08
【问题描述】:

我是 iOS 开发的新手,正在开发与 Web 服务交互的应用程序。我有一个登录视图控制器,它带有各自的 NIB 文件,用于控制登录页面。然后我有一个列表视图控制器,其中包含相应的 NIB 文件,它在登录后显示来自 Web 服务的元素列表。当我创建应用程序时,我创建了一个空应用程序,所以现在我的故事板中没有项目。

我将登录视图控制器加载为根视图控制器。按下登录按钮并验证凭据后,我想使用列表视图控制器将用户带到列表视图。在做了一些研究之后,您似乎需要一个故事板来执行此操作。

我真的需要一个故事板来切换视图和视图控制器吗?如果不是,我如何添加故事板并将其与当前视图一起使用,这样我就不必重做整个视图?

任何帮助将不胜感激。

【问题讨论】:

  • 您不需要故事板。但是,将列表视图作为根视图可能会更好。然后当应用程序加载时检查他们是否已登录,如果没有以模态方式显示登录视图(如果您希望它是即时的,则不显示动画),然后在他们登录时将其关闭。您是否有标签栏或您如何导航应用的各个部分之间?
  • 您创建一个导航控制器作为窗口的根视图控制器。然后将登录控制器设置为导航控制器的根视图控制器。如果您想显示其他控制器,只需将它们推送到导航堆栈,或显示它们。

标签: ios objective-c storyboard


【解决方案1】:

我正在尝试就您的问题讨论一些案例。

案例 1: 您有一个导航控制器作为窗口的 rootViewController,而 loginViewController 作为该导航控制器的 rootViewController。

如果登录成功,您可以更改导航控制器的根视图控制器。为此,您需要在 AppDelegate 中设置一个属性。像这样:

@property (strong, nonatomic) UINavigationController *navControl;

在 AppDelegate.m 文件中

self.navControl = [[UINavigationController alloc] initWithRootViewController:login];

在 navControl 中分配一个根视图控制器。并将其设置为您窗口的 rootViewController。

self.window.rootViewController = self.navControl;

如果登录成功,则从您的 loginController 中更改您的 navControl 的 rootViewController,方法是创建 AppDelegate 的实例。

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
appDelegate.navControl.rootViewController = anotherViewController;

注意:登录是一种特殊情况。您不想通过按返回按钮返回登录页面。所以改变你的导航控制器的rootViewController。但是对于其他视图,您可以只推送 ViewControllers。

案例 2: 您没有 navControl 作为 rootViewController。如果您只想更改窗口的 rootViewController,那么您可以这样做:

appDelegate.window.rootViewController = anotherViewController;

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    1:首先在appdelegate.h中创建UiWindow属性

    @property (strong, nonatomic) UIWindow *window;
    

    2:在appdelegate.m文件中创建UINavigationController的通用变量

    UINavigationController *navigationController;
    

    3:像这样自定义您的应用程序委托方法,请注意在应用程序委托中导入 viewcontroller.h 文件。

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
        // Override point for customization after application launch.
    
       //suppose view controller is your login page 
        ViewController *viewController= [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
    
        navigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
    
        [navigationController.navigationBar setHidden:TRUE];
    
    
    
        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
        [self.window setRootViewController:navigationController];
        [self.window makeKeyAndVisible];
        self.window.backgroundColor = [UIColor whiteColor];
    
        return YES;
    }
    

    我希望它会起作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-17
      • 2012-02-12
      • 2012-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多