在iOS编程中,使用Storyboards而不是xib文件的好处有哪些?

14 浏览
0 Comments

在iOS编程中,使用Storyboards而不是xib文件的好处有哪些?

使用Storyboards和xib文件之间的主要区别是什么?\n具体来说,使用Storyboards有什么优点或缺点?\n不幸的是,尽管我做了相当多的研究,但我只能找到一些简单的教程,向你展示如何设置一个Storyboard,而不是解释它们是什么的具体信息。

0
0 Comments

Storyboards和.xib文件都是在Xcode中用于可视化创建iOS和Mac应用程序的界面构建器文件(我将使用iOS术语来表示类,因为这个问题标记为iOS,但它也适用于Mac编程)。

Nibs是用于单个UIView的。它们还可以通过将File's Owner的类设置为任何UIViewController的子类,并连接view outlet(在Xcode的最右侧窗格中使用Connections Inspector进行拖动连接)来连接到UIViewController子类。

Storyboards用于包含1个或多个UIViewController的用户界面。您可以在一个Storyboard中构建整个用户界面,也可以将其分成较小的部分。

Storyboards应始终优先使用.xib文件/Nibs(用于视图控制器)。Storyboards具有更多功能,并且由Apple积极开发。

每个支持Nib的论点都依赖于它们单独使用,而Storyboards包含许多场景。您可以像使用Nib一样轻松地为每个UIViewController使用一个Storyboard(请参阅下面的代码示例)。

Storyboards优于Nib的基本论点在于Apple鼓励使用Storyboards并在其上投入更多的开发工作。

1. Storyboards具有Nib缺少的缩放功能。Nib无法进行缩放,当在小型笔记本电脑上设计较大屏幕时,这非常不方便。

2. Nibs缺少关键功能,例如:

- UITableView的原型和动态单元格(更多信息)

- 顶部布局指南属性(请参阅评论)

- 可能还有其他功能,请在此列表中添加或评论

3. 您不需要设置Files Owner的类。

对Storyboards的基本反对观点是,将所有视图控制器放在一个地方会导致合并冲突、Xcode速度慢、构建时间长且维护起来非常麻烦。因此,一般建议为每个UIViewController使用一个Nib。

但是...您可以为每个UIViewController创建Storyboard。一种常见的做法(至少对我来说)是将所有UIViewController的初始化隐藏在一个类方法中(因为没有其他类需要知道控制器的Nib/Storyboard所在的文件的名称)。

让我们比较一下可能用于创建此类方法的相关代码片段。两者之间的唯一差异是一行代码。

Objective-C

Storyboard

+ (ViewController *)create
{
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"ViewController" bundle:nil];
    return [storyboard instantiateInitialViewController];
}

Nib

+ (ViewController *)create
{
    return [super initWithNibName:@"ViewController" bundle:nil];
}

Usage

- (void)showMyViewController
{
    ViewController *vc = [ViewController create];
    [self presentViewController:vc animated:YES completion:nil];
}

Swift

Storyboard

static func create() -> ViewController {

let storyboard = UIStoryboard(name: "ViewController", bundle: NSBundle.mainBundle())

return storyboard.instantiateInitialViewController() as! ViewController

}

Nib

static func create() -> ViewController {

return ViewController(nibName: "ViewController", bundle: nil)

}

Usage

func showMyViewController() {

let vc = ViewController.create()

self.presentViewController(vc, animated: true, completion: nil)

}

我将解决常见的Nib论点。正如我之前提到的,它们大多是支持单个文件的,而不是Nib优于Storyboards的论据。

1. 团队和合并

论据:如果您与多个人在一个团队上工作,那么具有大量视图控制器的Storyboard会导致合并冲突。

回应:一个Storyboard不会引起更多的合并冲突,就像一个Nib一样。

2. 复杂性

论据:非常复杂的应用程序在Storyboard中有很多场景,这导致了一个巨大的Storyboard,加载时间长且几乎无法理解。

回应:这是一个很好的观点,但是您可以将Storyboard轻松分成较小的部分。Storyboard引用是一项看起来非常不错的功能,可以用于链接Storyboard,但仅适用于Xcode 7 / iOS 9+。同样,这仍不是选择单独的Nib而不是Storyboards的原因。

3. 重用性

论据:为每个UIViewController子类创建一个Nib可以使您重用代码,因此您不必为Storyboard中的每个场景设置所有约束和outlets。

回应:同样,这并不是选择单独的Nib而不是单独的Storyboards的原因。

0
0 Comments

Storyboards和xib文件是iOS编程中常用的界面设计工具。虽然Storyboards相比xib文件有一些优势,但也存在一些问题。首先,使用Storyboards在团队中的协作不太方便,因为只有一个人可以同时编辑Storyboards文件。其次,如果需要使用一些Storyboards不支持的功能,将Storyboards和编程创建的视图混合在一起并不容易。此外,XCode关于Storyboards存在一些繁琐的bug,有时候Storyboard文件或其链接可能会损坏。对于复杂的项目,最好不要使用Storyboards。然而,随着时间的推移,Storyboards和Xcode的稳定性和文档越来越好,现在在大多数项目中使用Storyboards是可以推荐的。此外,新版的Xcode 5还提供了更好的团队合作功能,使得合并Storyboards代码变得更加容易。有些人认为Storyboards在初学者阶段非常有用,可以快速进行原型设计和开发,但是在进入中级阶段后,往往会发现代码的可预测性更高,因此更倾向于使用代码来进行界面设计。最后,虽然可以将Storyboards和非Storyboards代码混合使用,但在过去可能比较困难,现在已经变得相对简单。

0
0 Comments

使用Storyboards而不是xib文件在iOS编程中的好处是什么?

Storyboards是一个包含所有场景(视图控制器、导航控制器、标签栏控制器等)的容器,管理这些场景之间的连接和转换(称为Segues),以及控制器之间的通信机制。Storyboards给你一个完整的应用程序流程的视图,这是你从单独的nib文件中无法获得的。此外,使用Storyboards可以减少每个控制器拥有自己的nib文件时产生的混乱。

然而,使用Storyboards的唯一缺点是它只能在运行iOS 5或更高版本的设备上使用,无法在iOS 4或更低版本上运行。

下面是一些关于Storyboards的教程资源:

- Ray Wenderlich's提供了非常好的教程。

- 如果你是苹果开发者计划的成员,可以在iTunesU上查看去年的WWDC关于Storyboards的会议,非常棒。

- 最新的斯坦福iOS应用程序编程课程也提供了很好的教学资源。

此外,还有一些关于Storyboards的其他观点和补充:

- Storyboards具有一个主要缺点,即在使用git/svn进行多人编辑时可能会产生冲突。

- Storyboards还有一个重要的缺点是无法在文件级别上控制自动布局,每个xib文件可以选择使用自动布局或不使用,而使用Storyboards时,所有的控制器都必须使用或不使用自动布局。

使用Storyboards可以提供更好的可视化应用程序流程管理,并减少控制器之间的混乱,但也需要考虑兼容性和多人编辑时可能产生的冲突。

0