我为我的IOS应用程序开发了登录,注册和其他几个屏幕。现在,我正在尝试为我的应用程序构建仪表板屏幕(与Facebook的新闻提要类似,请考虑使用它),但是在情节提要中创建UI面临困难。另外,如果帖子中没有Image,那么我希望UITableView单元格通过将UIImageView的高度设置为零来减小其大小,但是它对我不起作用。总体而言,对于我的仪表板屏幕,我正在考虑从代码本身构建UI。现在,我有以下问题:
是否可以将故事板用于某些屏幕,而不用于其他屏幕? 如果是,那么如何从具有情节提要的屏幕(例如我的登录屏幕)导航到没有情节提要的屏幕(例如我的仪表板屏幕)。
谢谢。
答案 0 :(得分:2)
是的,您可以在不使用情节提要的情况下制作应用,或者如果要使用,也可以使用。 故事板的优点
1- Ease of Use
2- Visual
代码的优势
1-Control
2-{{1}}
3- Reusability
-这是某些标准开发人员拒绝使用Storyboard的主要原因。解决合并冲突非常困难。这使得在同一个Storyboard上进行工作变得很麻烦。这不是一个简单的任务,因为我们的Storyboard合并冲突不仅包含代码,还包含呈现Merge Conflict
的代码。
当然,您可以同时使用情节提要和代码来构建App。这完全取决于您。对于导航,只需在代码中调用简单的push and segues方法。希望这会有所帮助。
答案 1 :(得分:2)
使用情节提要::首先将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都位于不同的情节提要中
从捆绑包中获取情节提要,然后导航至该情节提要
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 :(得分:1)
您可以在iOS中混合所有类型,
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并分别跳到那里。