当多人合作时,故事板从git工作流角度来看是一种巨大的痛苦.例如,.storyboard文件中的XML具有其起始<document>标记toolsVersion和systemVersion属性,这些属性由最新文件操作符恰好运行的任何配置更改.大家同步的Xcode版本恰恰似乎帮助toolsVersion,但systemVersion变化不管是什么,这取决于具体的Mac和/或开发运行OS X的版本上.
这是愚蠢的,但大多是无害的.然而,令我们担心的是,在其他时候,只需在故事板之后打开它们,就会自动对故事板进行一些其他更改git pull.也就是说,Alice对故事板进行了更改,提交并将它们推送到存储库.然后鲍勃拉出爱丽丝的变化并打开故事板进行进一步的更改.他打开故事板的那一刻,文件图标立即变为修改,但是,未保存的状态,以及git status已发生的任何数量的变化怪异表演.所有这一切,没有鲍勃改变任何东西或自己保存文件.
我们看到的最常见的自动更改是<classes>故事板文件末尾附近整个标记层次的消失或重新出现.我们还没弄清楚造成这种情况的原因.我们可能在各种.lproj目录中有几个本地化版本的故事板,当在Interface Builder中打开它们时,类层次结构可能会自动从某些层次结构中删除并添加到其他版本中,或者单独留在某些层次结构中.这会导致很多噪音git diff,但实际上并没有破坏任何功能.我们经常会有选择地将我们所做的实际更改添加到git的索引中,提交那些,然后只丢弃自发的,荒谬的<classes>变化.这是为了保持提交小而好,因为它们应该是.然而,最终,由于Xcode不断重新进行更改,它变得太麻烦了,有人只是愤怒地提交它们以及其他一些东西......这很好,直到其他人的Xcode决定要将它们更改为否明显的原因.(我们的提交历史对此很多咒骂.)
是否有其他人看到这种行为?这是我们的一个或多个开发者Mac上的Xcode错误还是配置问题?我们在与XIB文件协作时已经看到了一些类似的行为,但故事板似乎更容易受此影响.
考虑以下场景:我有一个基于故事板的应用程序.我将一个ViewController对象添加到storyboard中,将此ViewController的类文件添加到项目中,并在IB身份检查器中指定新类的名称.现在我将如何从AppDelegate以编程方式引用此ViewController?我已经使用相关类创建了一个变量并将其转换为IBOutlet属性,但我没有看到任何方法能够在代码中引用新的ViewController - 任何尝试按住Ctrl键拖动连接都不起作用.
即在AppDelegate中我可以像这样到达基本的ViewController
(MyViewController*) self.window.rootViewController
Run Code Online (Sandbox Code Playgroud)
但故事板中包含的任何其他ViewController怎么样?
我从故事板中收到此警告 - 原型表单元格必须具有重用标识符.
我已在属性检查器中重命名了标识符,但它似乎没有删除警告.
有什么建议?
默认情况下,Xcode 6界面构建器具有新的复选框"使用大小类".它使视图自适应.

当我尝试在我的故事板中的2个视图之间制作segue时,我有了新的选择:

相反旧:

现在我们有"显示"和"呈现模态"而不是"推"和"模态".旧选项标记为已弃用.我选择了"show"选项,因为在segue设置中它称为"show(例如push)

但它没有推动.Segue动画看起来像从底部滑动(模态),导航栏消失.
问题是:如何让"show"像push一样工作?是否可以或者我应该使用"推(弃用)"代替?我在哪里可以找到有关新型segue的任何信息?我在iOS8开发人员库中找到的唯一一件事是Storyboards帮助您设计用户界面,但没有关于"show"segue的信息.
我试图创建新项目,"show"真的像"推"一样工作.我认为我的项目中的问题可能是因为我重复使用导航控制器这样的代码,但我不知道如何解决它.
if ( [segue isKindOfClass: [SWRevealViewControllerSegue class]] ) {
SWRevealViewControllerSegue *swSegue = (SWRevealViewControllerSegue*) segue;
swSegue.performBlock = ^(SWRevealViewControllerSegue* rvc_segue, UIViewController* svc, UIViewController* dvc) {
UINavigationController* navController = (UINavigationController*)self.revealViewController.frontViewController;
[navController setViewControllers: @[dvc] animated: NO ];
[self.revealViewController setFrontViewPosition: FrontViewPositionLeft animated: YES];
};
}
Run Code Online (Sandbox Code Playgroud)
之后我尝试在MainViewController之后推送NewViewController

我似乎只是iOS 7,iOS 7.1问题.
我想在故事板中使用多个viewcontrollers中的视图.因此,我考虑在外部xib中设计视图,以便在每个viewcontroller中反映更改.但是如何从故事板中的外部xib加载视图呢?它甚至可能吗?如果不是这样的话,还有哪些其他选择可以适应这种情况呢?
假设我有一个包含UINavigationController初始视图控制器的故事板.它的根视图控制器是子类UITableViewController,它是BasicViewController.它已IBAction连接到导航栏的右侧导航按钮
从那里我想使用故事板作为其他视图的模板,而无需创建其他故事板.假设这些视图具有完全相同的接口,但具有类的根视图控制器,SpecificViewController1并且SpecificViewController2是其子类BasicViewController.
除了IBAction方法之外,这两个视图控制器将具有相同的功能和接口.
它将如下所示:
@interface BasicViewController : UITableViewController
@interface SpecificViewController1 : BasicViewController
@interface SpecificViewController2 : BasicViewController
Run Code Online (Sandbox Code Playgroud)
我可以这样做吗?
我可以实例化故事板BasicViewController但是具有根视图控制器的子类SpecificViewController1和SpecificViewController2?
谢谢.
我最近更新到XCode 9.当我构建应用程序时,它会对我的pod文件中的某些故事板说"非法配置".我试图重新创建故事板文件,但它没有帮助.
![[1]](https://i.stack.imgur.com/fHjiM.png)
我是IOS的新手,最近开始使用Xcode 4.5.我看到每个viewController我都可以设置一些身份变量,包括故事板ID.这是什么以及如何使用它?

我开始在stackoverflow上搜索,但找不到任何解释.我认为这不仅仅是一些愚蠢的标签,我可以设置为记住我的控制器吗?它有什么作用?
我在故事板中的UIViewController中有一个UIView,我想在空间上添加约束,查看距离上边缘的距离.
现在,当我通常按ctrl +拖动到ViewController的主视图时,我只能选择将其设置为顶部布局指南.
这对我来说是一个问题,因为在应用程序中的某一点我将主视图向上移动大约20-50px然后发生的是我不会移动的视图...因为它不与superview对齐.
如何在故事板中手动执行此操作或者是否必须以编程方式添加它?
我正在使用xcode 6.
我有一个设置有工作登录和主视图控制器的故事板,后者是用户在登录成功时导航到的视图控制器.我的目标是在验证(存储在钥匙串中)成功时立即显示主视图控制器,如果验证失败则显示登录视图控制器.基本上,我想在AppDelegate中执行此操作:
// url request & response work fine, assume success is a BOOL here
// that indicates whether login was successful or not
if (success) {
// 'push' main view controller
} else {
// 'push' login view controller
}
Run Code Online (Sandbox Code Playgroud)
我知道方法performSegueWithIdentifier:但是这个方法是UIViewController的实例方法,所以不能从AppDelegate中调用.如何使用我现有的故事板来做到这一点?
编辑:
故事板的初始视图控制器现在是一个没有连接任何东西的导航控制器.我使用setRootViewController:区别因为MainIdentifier是一个UITabBarController.那么这就是我的线条:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
BOOL isLoggedIn = ...; // got from server response
NSString *segueId = isLoggedIn ? @"MainIdentifier" : @"LoginIdentifier";
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Storyboard" bundle:nil];
UIViewController *initViewController = [storyboard instantiateViewControllerWithIdentifier:segueId];
if (isLoggedIn) { …Run Code Online (Sandbox Code Playgroud) storyboard ×10
ios ×6
objective-c ×3
xcode ×3
iphone ×2
xib ×2
autolayout ×1
cocoa-touch ×1
ios5 ×1
ios8 ×1
push ×1
segue ×1
uiview ×1
xcode6 ×1
xcode9-beta ×1