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 开发有和没有情节提要的主要内容,如果未能解决你的问题,请参考以下文章