IOS 开发有和没有情节提要

Posted

技术标签:

【中文标题】IOS 开发有和没有情节提要【英文标题】:IOS development with and without storyboard 【发布时间】:2018-07-07 10:55:58 【问题描述】:

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

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

谢谢。

【问题讨论】:

是的,您可以通过混合故事板和编码的屏幕来构建您的 UI 【参考方案1】:

使用storyboard:首先将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)

如果两个 SecondViewController 在不同的故事板中

从 Bundle 中获取故事板,然后导航到它

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)

没有故事板:

将您的 LoginViewController 嵌入为 rootViewController,以便可以进行导航。

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

现在,您可以从 LoginViewController 中按上述建议以编程方式推送。

【讨论】:

【参考方案2】:

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

1-Ease of Use

2-Visual

代码的优点

1-Control

2-Reusability

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

当然,您可以同时使用 Storyboards 和 Code 来构建 App。这完全取决于您。对于导航,只需在代码中调用简单的 push 和 segues 方法。希望这会有所帮助。

【讨论】:

“标准开发者拒绝使用 Storyboard。” - 你在说什么?这似乎纯粹是您将自己的观点投射到他人身上。 其他人的个人意见 - 与“标准开发人员”无关,无论他们是谁。如果您的意思是“一些”开发人员,那么我会同意您的看法。【参考方案3】:

你可以在iOS中混合所有类型,

    故事板,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 并分别跳转到那里。

【讨论】:

以上是关于IOS 开发有和没有情节提要的主要内容,如果未能解决你的问题,请参考以下文章

使用 ios5 和情节提要推送带有参数的视图控制器

Xamarin.IOS 导入现有情节提要

没有情节提要或图像的 iOS 启动图像

iOS:如何以编程方式将视图添加到情节提要视图

iOS 应用程序加载器:错误 ITMS-90705:“未找到启动情节提要...”

iOS NSAutoLayoutConstraint:没有为情节提要的视图设置