基于ios应用程序中的不同输入切换UIViewControllers的最佳方法

时间:2015-06-04 01:31:41

标签: ios swift uiviewcontroller uikit xcode-storyboard

我想做的只是根据一些数据更改视图。为了准确展示我想要做的事情,我构建了一个示例来演示。我使用UISegmentedControl来模拟数据数据,然后当按下按钮时,它将根据UISegmentedControl的值在视图之间切换。这是故事板......

enter image description here

你可以看到有一个带有UISegmentedControl的基本视图,然后在同一个视图上有一个按钮,它将根据UISegmentedControl的状态触发视图控制器切换到右边三个视图控制器之一。我已经包含了我的基础UIViewController的类,所以你们都可以看到我如何实现视图切换。

import UIKit

class RootViewController: UIViewController {

    var nextViewIdentifier: String? = nil

    @IBAction func switchViewButtonPressed(sender: UIButton) {
        if (nextViewIdentifier != nil) {
            let nextView = self.storyboard?.instantiateViewControllerWithIdentifier(nextViewIdentifier!) as! UIViewController
            self.showViewController(nextView, sender: self)
        }
    }


    @IBAction func valueChanged(sender: UISegmentedControl) {
        switch sender.selectedSegmentIndex {
        case 0:
            nextViewIdentifier = "View1"
        case 1:
            nextViewIdentifier = "View2"
        case 2:
            nextViewIdentifier = "View3"
        default:
            nextViewIdentifier = nil
        }
    }  
}

因此,按下按钮时会调用第一个函数switchViewButtonPressed,它将根据变量nextViewIdentifier切换视图。当按下UISegmentedControl上的按钮时,第二个函数valueChanged只会更改nextViewIdentifier变量。

所有这些代码都有效,但它似乎不是以故事板格式实现此功能的自然方式。似乎应该有其他东西来实现我正在寻找的效果。我问是否有人有更好的方法来改变基于先前未知的数据以及这些观点完全不同的数据。我假设我可以这样做的另一种方法是在一个视图控制器中堆叠不同的视图,然后通过prepareForSegue方法选择我想要的视图。无论如何,任何关于在这种情况下切换视图控制器的最佳方法的建议都是值得赞赏的。感谢。

4 个答案:

答案 0 :(得分:0)

使用带有“embed”segues的容器视图。按分段控件上的按钮时执行segues。有关容器视图的更多信息:

https://www.youtube.com/watch?v=13buSJ9XeQI

答案 1 :(得分:0)

您应该尝试基于UITabBar构建应用程序,它专为在视图之间切换而设计。还有here

答案 2 :(得分:0)

选项1:如果视图1/2/3是您应用的无关部分,则UITabBarController有意义。例如," App Store"和#34; iTunes Store"应用程序使用标签栏。

选项2:如果视图1/2/3显示类似信息的子集,您可以使用单个UITableViewController并只需重新加载tableView选择不同段时的数据。例如," App Store" app有一个热门图表标签,其中UISegmentedControl用于显示付费,免费和热门应用。不需要为此使用3个不同的视图控制器。

选项3 :如果视图1/2/3显示相关的信息,但以不同的方式,您可以使用父{{1}使用UIViewController嵌入UIContainerView s 1/2/3。例如," iTunes Store"应用程序有一个电影选项卡,其UIViewController用于显示精选和图表。图表看起来像典型的表格视图,而精选看起来更复杂。

我最近在我自己的应用中使用来自其他开发人员的优秀示例代码实现了选项3:https://github.com/mluton/EmbeddedSwapping。我很惊讶它是多么容易以及它的运作情况。

答案 3 :(得分:0)

如果有人关心,我解决这个问题的方法是从主视图控制器本身创建segues并用标识符命名segues。然后,根据UISegmentedControl的位置,我使用方法self.performSegueWithIdentifier(<String Identifier>, sender: self)调用带有标识符的segue。