有和没有情节提要的iOS开发

时间:2018-07-07 10:55:59

标签: ios swift storyboard

我为我的IOS应用程序开发了登录,注册和其他几个屏幕。现在,我正在尝试为我的应用程序构建仪表板屏幕(与Facebook的新闻提要类似,请考虑使用它),但是在情节提要中创建UI面临困难。另外,如果帖子中没有Image,那么我希望UITableView单元格通过将UIImageView的高度设置为零来减小其大小,但是它对我不起作用。总体而言,对于我的仪表板屏幕,我正在考虑从代码本身构建UI。现在,我有以下问题:

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

谢谢。

3 个答案:

答案 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中

enter image description here

使用seque enter image description here

数据传输代码:

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. Storyboard,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并分别跳到那里。