Xcode 4 for Dummies:为啥应用程序运行时没有应用情节提要设置?

Posted

技术标签:

【中文标题】Xcode 4 for Dummies:为啥应用程序运行时没有应用情节提要设置?【英文标题】:Xcode 4 for Dummies: Why are Storyboard Settings not Being Applied When the App Runs?Xcode 4 for Dummies:为什么应用程序运行时没有应用情节提要设置? 【发布时间】:2012-06-23 02:34:28 【问题描述】:

解决方案

确保在 plist 中将故事板名称列为主故事板文件名。


我有一个Storyboard 和一个UINavigationViewController,它连接到一个NavigationViewController 类,它被设置为UIWindow rootViewController。当应用程序运行时(在模拟器 (5.1) 中),我得到一个空白黑屏,顶部带有蓝色导航栏。

第一个问题是,在故事板中,我将导航栏设置为黑色。我还将状态栏设置为半透明黑色。应用运行时,这两种样式都不会受到尊重。

第二个问题是导航控制器的视图是空的,即使在情节提要中它与UITableViewController 有关系。

如何解决这两个问题。我刚开始再次使用 Xcode,之前一直在使用 4.0,所以故事板让我失望了......

更新

这是所要求的代码。显然我不能发布故事板(可以吗?)。

AppDelegate:

#import "AppDelegate.h"

@implementation AppDelegate

@synthesize window = _window;
@synthesize navigationController;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

navigationController = [[NavigationViewController alloc] init];

    self.window.rootViewController = navigationController;
[self.window makeKeyAndVisible];

    return YES;


- (void)applicationWillResignActive:(UIApplication *)application 


- (void)applicationDidEnterBackground:(UIApplication *)application 


- (void)applicationWillEnterForeground:(UIApplication *)application 


- (void)applicationDidBecomeActive:(UIApplication *)application 


- (void)applicationWillTerminate:(UIApplication *)application 


@end

导航视图控制器:

#import "NavigationViewController.h"

@interface NavigationViewController ()
@end

@implementation NavigationViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];

if (self) 
    

    return self;


- (void)viewDidLoad 
    [super viewDidLoad];


- (void)viewDidUnload 
    [super viewDidUnload];


 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
    return (interfaceOrientation == UIInterfaceOrientationPortrait);


@end

【问题讨论】:

【参考方案1】:

问题是您将一个完全空白的根控制器设置为根控制器,而不是故事板上的那个。您要做的是删除那部分代码,然后在情节提要上单击“是初始视图控制器”的内容

使用故事板时,您通常不必修改 appdelegate,因为 xcode 设置了将出现的初始视图,所有这些都仅基于您设置故事板的方式。您可以在 plist 中检查这一点,它说明哪个故事板将用作主要故事板。

如果您想像那样加载导航控制器,那么您可以执行类似的操作,您必须从情节提要本身获取视图控制器并呈现它。

instantiateViewControllerWithIdentifier

但是在使用情节提要时没有必要这样做,因为它会自动加载设置为初始的那个(可以看作是箭头指向它的视图控制器)

您的应用委托方法应如下所示

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

    return YES;

【讨论】:

这就是我理解故事板工作的方式,但如果我在 AppDelegate 中注释掉作业,我只会得到一个空白屏幕。自项目开始以来,导航控制器已被标记为Is Initial View Controller,但没有显示任何内容。如果没有 AppDelegate 中的分配,我会得到一个完全空白的屏幕。至少在作业中我得到了一个导航栏... 是的,您得到了一个,因为您正在以编程方式创建一个来显示,但这个与故事板无关。您是否从配置中更改了其他任何内容? plist 或项目设置?将按钮或图像添加到导航控制器的第一个视图以查看是否看到了什么 其实要测试有没有,只需添加一个普通的带有1个按钮的View COntroller,然后将箭头移动到这个,看看你是否看到那个。如果你这样做意味着你设置你的导航 vc 不正确 尝试了你建议的测试,我仍然得到一个空白的黑屏。我也收到此错误:“应用程序窗口应在应用程序启动结束时具有根视图控制器”,这就是我试图在委托中分配控制器的原因。 没关系!我得到了它。我只记得 YouTube 视频的这个小 2 秒部分,制作者在 plist 中设置了故事板名称。由于我从一个空项目开始并手动添加了故事板,这就是它丢失的原因。无论如何,你对其他事情的看法是对的,所以我会选择你的答案。

以上是关于Xcode 4 for Dummies:为啥应用程序运行时没有应用情节提要设置?的主要内容,如果未能解决你的问题,请参考以下文章

Book (Swift for Dummies) 第 4 章练习:致命错误:在展开 Optional 值时意外发现 nil

SLAM初探-SLAM for Dummies

为啥 Xcode 4.1 说我的 iPad 专用应用程序可以在 iPhone 模拟器中运行?

如何将 pandas get_dummies 函数应用于有效数据集?

什么是循环冗余检查以及它是如何简单地工作的(for-dummies 风格)?

链资料Blockchain For Dummies电子书