如何在 Cocoa Touch 中的任意两个 ViewController 之间进行转换?
Posted
技术标签:
【中文标题】如何在 Cocoa Touch 中的任意两个 ViewController 之间进行转换?【英文标题】:How to transition between any two ViewControllers in Cocoa Touch? 【发布时间】:2015-03-02 07:01:03 【问题描述】:我是相当新的 ios 开发人员。例如,我的应用有多个 viewController
s -
每个屏幕都有自己的viewController
。
用动画在任意两个任意viewController
s 之间转换的最佳方式是什么?
我目前的做法是 -
-
保留对
AppDelegate.m
中每个viewController
的引用
根据需要不断更改窗口的根控制器
这既麻烦又似乎效率很低,而且我不太确定如何在此处合并动画过渡。
我看到了UINavigationController
的一些示例,但它看起来像是一个“堆栈”视图,您可以进入然后退出。我不想在此处保留历史记录,只需从任何视图切换到另一个视图即可。
有什么好的方法可以做到这一点?
谢谢!
【问题讨论】:
看看UITabBarController,除了登录可能有用 是的,但是标签栏显示在底部,对吗? 【参考方案1】:试试这个代码。
AppDelegate.h
#import <UIKit/UIKit.h>
#import "LoginViewController.h"
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@property (strong,nonatomic) UINavigationController *navigationController;
@property (strong,nonatomic) LoginViewController *loginVC;
@end
AppDelegate.m
#import "AppDelegate.h"
#import "LoginViewController.h"
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.loginVC = [[LoginViewController alloc]initWithNibName:nil bundle:nil];
self.loginVC.title = @"Login Page";
self.navigationController = [[UINavigationController alloc]initWithRootViewController:self.loginVC];
self.window.rootViewController = self.navigationController;
[self.window makeKeyAndVisible];
LoginViewController.h
#import <UIKit/UIKit.h>
#import "MyProfileViewController.h"
@interface LoginViewController : UIViewController
@property (strong,nonatomic)MyProfileViewController *myProfileVC;
@end
LoginViewController.m 文件中的登录按钮操作
- (IBAction)pushMyProfileView:(id)sender
self.myProfileVC = [[MyProfileViewController alloc]initWithNibName:nil bundle:nil];
[self.navigationController pushViewController:self.myProfileVC animated:YES];
【讨论】:
所以这对于在两个特定视图之间转换很有用,但是如果我有 8 个视图控制器,例如,每个视图控制器都需要存储对其他 7 个的引用。【参考方案2】:基本上你可以通过以下方式实现:
-
Apple 容器(UINavigationController、UITabbarController、UISplitController)
遏制 API
使用“普通”视图控制器和模态展示
Containment API 可能是您正在寻找的,您创建一个 UIViewController 负责管理其子视图控制器的呈现。这里是Apple Documentation,里面有很多例子。
【讨论】:
【参考方案3】:作为初学者,我认为最简单的解决方案是使用Storyboard
并在视图控制器之间创建一个segue。
在您的 ViewController 中,您应该重写 prepareForSegue:
方法以将数据传递给 segue.destinationViewController
【讨论】:
以上是关于如何在 Cocoa Touch 中的任意两个 ViewController 之间进行转换?的主要内容,如果未能解决你的问题,请参考以下文章