IOS 有和没有故事板的开发

IOS development with and without storyboard

我已经为我的 IOS 应用程序开发了登录、注册和其他几个屏幕。现在我正在尝试为我的应用程序构建仪表板屏幕(将其视为类似于 Facebook 的新闻提要)但在故事板中创建 UI 时遇到困难。此外,如果 post 中没有图像,那么我希望 UITableView 单元格通过将 UIImageView 的高度设置为零来减小其大小,但这对我不起作用。总体而言,对于我的仪表板屏幕,我正在考虑从代码本身构建 UI。现在我有以下问题:

是否可以对某些屏幕使用故事板,而对其他屏幕不使用? 如果是,那么我如何从有故事板的屏幕(比如我的登录屏幕)导航到没有故事板的屏幕(比如我的仪表板屏幕)。

谢谢。

是的,你可以在不使用故事板的情况下制作应用程序,或者如果你想使用你也可以使用。 故事板的优点

1- Ease of Use

2- Visual

代码的优点

1-Control

2-Reusability

3- Merge Conflict - 这是一些标准开发人员拒绝使用 Storyboard 的主要原因。合并冲突很难解决。这使得在同一个 Storyboard 上工作成为一个艰苦的过程。这不是一项简单的任务,因为我们的 Storyboard 合并冲突不仅仅包含代码,还有渲染 UI.

的代码

当然,您可以使用故事板和代码来构建应用程序。这完全取决于您。对于导航,只需在您的代码中调用简单的 push 和 segues 方法。希望这有帮助。

您可以混合使用 iOS、

中的所有类型
  1. 故事板,2.xib,3,以编程方式

1。故事板

使用

let vc = self.storyboard?.instantiateViewController(withIdentifier: "ViewController")
navigationController?.pushViewController(vc!, animated: true)

其中 "ViewController" 是故事板 ID

2.XIB

let vc1 = TransHistoryViewController(nibName: "TransHistoryViewController", bundle: nil)
navigationController?.pushViewController(vc1, animated: true)

其中 "TransHistoryViewController" 是 xib 名称。

3。以编程方式

你必须创建 UIViewController() instance 并分别跳转到那里。

使用故事板:首先将ViewController嵌入NavigationController

使用序列

数据传输代码:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let detailController = segue.destination as? SecondViewController
    detailController.object = self.object
}

没有序列:

如果两个 ViewController 都在同一个故事板中

func foo() {
    let secondViewController = self.storyboard?.instantiateViewControllerWithIdentifier("secondViewController") as? SecondViewController
    self.navigationController?.pushViewController(secondViewController!, animated: true)
}

如果第二个ViewController在不同的故事板中

从捆绑包中获取情节提要,然后导航到它

func foo() {
    let fooStoryboard = UIStoryboard.init(name: "Foo", bundle: Bundle.main)
    let secondViewController = self.storyboard?.instantiateViewControllerWithIdentifier("secondViewController") as? SecondViewController
    self.navigationController?.pushViewController(secondViewController!, animated: true)
}

没有故事板:

以 rootViewController 身份嵌入您的登录名ViewController,以便可以进行导航。

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.
    let fooStoryboard = UIStoryboard.init(name: "Foo", bundle: Bundle.main)
    let loginViewController = fooStoryboard.instantiateViewControllerWithIdentifier("loginViewController") as? LoginViewController
    let navigationController = UINavigationController(rootViewController: loginViewController)
    self.window?.rootViewController = navigationController
    return true
}

现在从登录ViewController您可以按照上面的建议以编程方式推送。