故事板更改未在iPhone模拟器中更新

时间:2015-10-26 15:49:04

标签: ios iphone xcode storyboard

有几天我遇到了这个问题而且我还没有设法解决它..

我完成了iPhone 5的故事板,现在我已经为iPhone 6创建了一个新的故事板,我从iPhone 5的故事板中复制了各种ViewController,我做了一些更改。

现在我在iPhone 6模拟器上运行我的应用程序无变化我已经看到了!

我附上一些截图:

enter image description here

例如我在蓝色中更改了UICollectionView的背景颜色,但结果如下:

enter image description here

我尝试重置模拟器,删除DerivedData文件夹,重新启动Xcode,删除Storyboard 6并重新添加,我不知道还有什么可以尝试,我从未遇到过这种问题

我尝试使用Xcode 6.4,现在我已升级到Xcode 7但问题仍然存在......

修改

在AppDelegate中

我以这种方式抓住了正确的故事板:

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

 _storyboard = [self grabStoryboard];

 //login-registrati view
lvc = (LoginController *)[_storyboard instantiateViewControllerWithIdentifier:@"login"];

tabbarController = (UITabBarController *)self.window.rootViewController;

if (isLogged == YES) {

    self.window.rootViewController = tabbarController;

}
else {

    self.window.rootViewController = lvc;
}

[self.window makeKeyAndVisible];

...
}

- (UIStoryboard *)grabStoryboard {

int screenHeight = [UIScreen mainScreen].bounds.size.height;
UIStoryboard *storyboard;

switch (screenHeight) {

        // iPhone 4s
    case 480:
        storyboard = [UIStoryboard storyboardWithName:@"Main3.5" bundle:nil];
        break;

        // iPhone 5s
    case 568:
        storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
        break;

        // iPhone 6
    case 667:
        storyboard = [UIStoryboard storyboardWithName:@"Main6" bundle:nil];
        break;

        // iPhone 6 Plus
    case 736:
        storyboard = [UIStoryboard storyboardWithName:@"Main6+" bundle:nil];
        break;
}

return storyboard;
}

我知道模拟器得到正确的故事板是在一些ViewController中我可以看到更改,但是如果我更改与作为根视图控制器的UITabbarController相关的ViewController,则模拟器上没有更改。

1 个答案:

答案 0 :(得分:1)

尝试为UIViewController创建一个属性:

@property (strong, nonatomic) UIViewController *initialViewController;

并在获得新的故事板参考后执行此操作:

_storyboard = [self grabStoryboard];
self.initialViewController = [_storyboard instantiateInitialViewController];

然后更改您的rootview

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.rootViewController = self.initialViewController;
[self.window makeKeyAndVisible];

编辑:

我甚至尝试过你的方式。它也有效。请确保您已在xcode中设置了视图控制器标识符,并且它与“login”匹配

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
lvc = (LoginController *)[_storyboard instantiateViewControllerWithIdentifier:@"login"];
 self.window.rootViewController = lvc;
 [self.window makeKeyAndVisible];

来自文档:

<强> instantiateInitialViewController

  

在视图中实例化并返回初始视图控制器   控制器图。

     

通常,仅在转换到其他情节提要文件中的初始视图控制器时才使用此方法。

编辑Ilario:

我接受了你的答案,因为它让我朝着正确的方向前进,我以这种方式解决了变化:

tabbarController = (UITabbarController *)[_storyboard instantiateInitialViewController];