如何启动另一个没有故事板的视图控制器?
How do I start another view controller with no storyboard?
我没有使用故事板或任何东西。我只是创建 cocoa 类 并将它们单独链接起来。我可以加载默认的 View Controller,即 SplashViewController,但我无法通过那里。
我有 php、android 编程和 python 方面的经验,但我对 Obj-C 和 iOS 框架的工作原理一无所知: (
SplashViewController.m
-(void)initializeInterface
{
//Initialize start button
[self.startButton addTarget:self action:@selector(startActivity) forControlEvents:UIControlEventTouchDown];
//Initialize fading backgrounds
[self animateImages];
}
-(void)startActivity
{
PhoneViewController *phoneView = [[PhoneViewController alloc] initWithNibName:@"PhoneViewController" bundle:nil];
[self.navigationController pushViewController:phoneView animated:YES];
}
SplashViewController.h
#import <UIKit/UIKit.h>
#import "PhoneViewController.m"
@class PhoneViewController;
@interface SplashViewController : UIViewController
@property (strong, nonatomic) PhoneViewController * phoneViewController;
@property UIImage *splashbg1;
@property UIImage *splashbg2;
@property (nonatomic, retain) IBOutlet UIImageView *splashbg;
@property (nonatomic, retain) IBOutlet UIButton *startButton;
-(void)initializeInterface;
-(void)animateImages;
-(void)startActivity;
@end
编辑
classAppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.window.backgroundColor = [UIColor whiteColor];
//Move from delegate view controller to root view controller
self.window.rootViewController=[SplashViewController new];
[self.window makeKeyAndVisible];
return YES;
}
将启动视图控制器包装在导航控制器中。
否则,您的初始视图控制器的 navigationController
属性 为 nil,pushViewController
无效。
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController: splashViewController];
要从一个 UIViewController 移动到另一个 UIViewController,您可以尝试以下操作
如果 SecondViewController *secondViewController 是您要移入的 UIViewController,那么您可以执行以下操作:
[self presentViewController: secondViewController animated:YES completion:nil];
这是当您的 UIViewController 没有嵌入到 UINavigationController 中时。
可以完全在代码中创建视图控制器而不使用故事板或 XIB 文件,但不推荐这样做。这就像尝试用汇编语言编写一个复杂的用户应用程序。从有必要的那一天起,最先进的技术就已经发展起来了。有更好的工具。使用它们。
自己创建一切都非常复杂,而且没有很好的文档记录。您正在为一个非常令人沮丧、容易出错的过程做好准备。自 2009 年以来,我几乎全职从事 iOS 开发工作,我不会尝试这样做。
也就是说,如果您是受虐狂,您会使用 initWithNibName:bundle:
创建视图控制器,为两个参数传入 nil,然后实现 loadView
方法。在 loadView
中,您将创建并安装视图层次结构。
如果您是 iOS/Objective-C 的新手,请勿这样做。这就像您第一次涉足 UNIX 时尝试用机器代码编写内核设备驱动程序一样。
如下更改 AppDelegate 方法 -
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.window.backgroundColor = [UIColor whiteColor];
UINavigationController *navcon = [[UINavigationController alloc]initWithRootViewController:[SplashViewController new]];
//Move from delegate view controller to root view controller
self.window.rootViewController=navcon;
[self.window makeKeyAndVisible];
return YES;
}
你的代码有问题,你没有使用任何 navigationController,它可以让你推送或弹出 UIViewController。做上面你可以使用你的方法 -(void)startActivity 来开始一个新的 ViewController.
我没有使用故事板或任何东西。我只是创建 cocoa 类 并将它们单独链接起来。我可以加载默认的 View Controller,即 SplashViewController,但我无法通过那里。
我有 php、android 编程和 python 方面的经验,但我对 Obj-C 和 iOS 框架的工作原理一无所知: (
SplashViewController.m
-(void)initializeInterface
{
//Initialize start button
[self.startButton addTarget:self action:@selector(startActivity) forControlEvents:UIControlEventTouchDown];
//Initialize fading backgrounds
[self animateImages];
}
-(void)startActivity
{
PhoneViewController *phoneView = [[PhoneViewController alloc] initWithNibName:@"PhoneViewController" bundle:nil];
[self.navigationController pushViewController:phoneView animated:YES];
}
SplashViewController.h
#import <UIKit/UIKit.h>
#import "PhoneViewController.m"
@class PhoneViewController;
@interface SplashViewController : UIViewController
@property (strong, nonatomic) PhoneViewController * phoneViewController;
@property UIImage *splashbg1;
@property UIImage *splashbg2;
@property (nonatomic, retain) IBOutlet UIImageView *splashbg;
@property (nonatomic, retain) IBOutlet UIButton *startButton;
-(void)initializeInterface;
-(void)animateImages;
-(void)startActivity;
@end
编辑
classAppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.window.backgroundColor = [UIColor whiteColor];
//Move from delegate view controller to root view controller
self.window.rootViewController=[SplashViewController new];
[self.window makeKeyAndVisible];
return YES;
}
将启动视图控制器包装在导航控制器中。
否则,您的初始视图控制器的 navigationController
属性 为 nil,pushViewController
无效。
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController: splashViewController];
要从一个 UIViewController 移动到另一个 UIViewController,您可以尝试以下操作
如果 SecondViewController *secondViewController 是您要移入的 UIViewController,那么您可以执行以下操作:
[self presentViewController: secondViewController animated:YES completion:nil];
这是当您的 UIViewController 没有嵌入到 UINavigationController 中时。
可以完全在代码中创建视图控制器而不使用故事板或 XIB 文件,但不推荐这样做。这就像尝试用汇编语言编写一个复杂的用户应用程序。从有必要的那一天起,最先进的技术就已经发展起来了。有更好的工具。使用它们。
自己创建一切都非常复杂,而且没有很好的文档记录。您正在为一个非常令人沮丧、容易出错的过程做好准备。自 2009 年以来,我几乎全职从事 iOS 开发工作,我不会尝试这样做。
也就是说,如果您是受虐狂,您会使用 initWithNibName:bundle:
创建视图控制器,为两个参数传入 nil,然后实现 loadView
方法。在 loadView
中,您将创建并安装视图层次结构。
如果您是 iOS/Objective-C 的新手,请勿这样做。这就像您第一次涉足 UNIX 时尝试用机器代码编写内核设备驱动程序一样。
如下更改 AppDelegate 方法 -
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.window.backgroundColor = [UIColor whiteColor];
UINavigationController *navcon = [[UINavigationController alloc]initWithRootViewController:[SplashViewController new]];
//Move from delegate view controller to root view controller
self.window.rootViewController=navcon;
[self.window makeKeyAndVisible];
return YES;
}
你的代码有问题,你没有使用任何 navigationController,它可以让你推送或弹出 UIViewController。做上面你可以使用你的方法 -(void)startActivity 来开始一个新的 ViewController.