Con*_*son 1 xcode storyboard uiviewcontroller ios
目前,我有一个单一故事板的工作应用程序.工作应用程序基于主 - 详细视图布局.我决定添加一个新的故事板,并将其设置为主要的故事板.当我单击运行时,它将运行并显示一个空白页面,这是我所期望的,因为我没有添加任何视图控制器.
我仍然是Objective-C的新手,因此,有许多事情我仍然不明白,这里有趣的部分.
当我在新更改的主故事板中添加UIViewController(并将其关联到UIViewController的子类),然后尝试运行它时,它会显示错误.
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIViewController viewControllers]: unrecognized selector sent to instance 0x7569a80'
Run Code Online (Sandbox Code Playgroud)
在我的AppDelegate下:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
UISplitViewController *splitViewController = (UISplitViewController *)self.window.rootViewController;
UINavigationController *navigationController = [splitViewController.viewControllers lastObject];
splitViewController.delegate = (id)navigationController.topViewController;
return YES;
}
Run Code Online (Sandbox Code Playgroud)
我不太确定我需要在上面的代码中添加什么.我确实尝试了下面的一行也没有成功,
UIViewController *viewController = (UIViewController *)self.window.rootViewController;
Run Code Online (Sandbox Code Playgroud)
因此,我该如何解决这个问题?
从中获取故事板文件 New file-->ios-->user interface---> storyboard
@property在appdelegate中创建故事板
@property (nonatomic, retain) UIStoryboard* storyboard ;
Run Code Online (Sandbox Code Playgroud)
在.m文件中执行之前写:
@interface AppDelegate ()
@property (strong, nonatomic) UIViewController *initialViewController;
@end
Run Code Online (Sandbox Code Playgroud)
这是为了引用初始viewcontroller的参考.
然后@synthesize storyboard在appdelegate.m然后导航你可以写入didFinishLaunchingWithOptions
//init storyboard
storyboard = nil;
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"6.0"))
{
CGSize result = [[UIScreen mainScreen] bounds].size;
if(result.height == 480)
{
storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhoneIOS5" bundle:nil];
NSLog(@"Version < 6");
// iPhone Classic
}
if(result.height == 568)
{
// iPhone 5
storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
NSLog(@"Version 6");
}
//NSLog(@"IOS 6");
}
else
{
storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhoneIOS5" bundle:nil];
//NSLog(@"IOS 5");
}
self.initialViewController = [storyboard instantiateInitialViewController];
Run Code Online (Sandbox Code Playgroud)
// instantiateInitialViewController表示它返回故事板上的箭头指向视图控制器,它是根视图控制器.
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.rootViewController = self.initialViewController;
[self.window makeKeyAndVisible];
Run Code Online (Sandbox Code Playgroud)
小智 5
在Xcode 7上,您可以转到info.plist并将"主故事板文件基本名称"键设置为新Storyboard的名称.
示例:您通过转到文件 - >新建 - >文件 - >故事板文件创建一个新的故事板文件,然后将其保存为"MyAwesomeUI.storyboard",然后在info.plist中将"主故事板文件基本名称"的密钥更改为"MyAwesomeUI".
干杯!
| 归档时间: |
|
| 查看次数: |
10774 次 |
| 最近记录: |