我正在使用表视图控制器实现自定义水平多个段,作为每个段的内容。但是如何为所有段仅实现一个控制器,因为所有段的视图都相同,但是只有数据是变化的。
我想将段的当前索引传递给表视图控制器以获取特定数据。
我正在使用-https://codeload.github.com/uacaps/PageMenu/zip/master中的CAPSPageMenu.swift文件吗?

这是我的代码-

class Entrance_main_controller: UIViewController {

             var pageMenu : CAPSPageMenu?



override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)

    // MARK: - UI Setup

    self.title = "Entrance Exam"

    // Initialize view controllers to display and place in array
    var controllerArray : [UIViewController] = []



    let controller1 : Entrance_Content_ViewController =         Entrance_Content_ViewController(nibName: "TestTableViewController", bundle: nil)
    controller1.title = "Engineering"
    controllerArray.append(controller1)
    let controller2 : Entrance_Content_ViewController = Entrance_Content_ViewController(nibName: "TestTableViewController", bundle: nil)
    controller2.title = "Medical"
    controllerArray.append(controller2)

    let controller3 : Entrance_Content_ViewController = Entrance_Content_ViewController(nibName: "TestTableViewController", bundle: nil)
    controller3.title = "Management"
    controllerArray.append(controller3)

    // Customize menu (Optional)
    let parameters: [CAPSPageMenuOption] = [
        .ScrollMenuBackgroundColor(UIColor(red: 30.0/255.0, green: 30.0/255.0, blue: 30.0/255.0, alpha: 1.0)),
        .ViewBackgroundColor(UIColor(red: 20.0/255.0, green: 20.0/255.0, blue: 20.0/255.0, alpha: 1.0)),
        .SelectionIndicatorColor(UIColor.orangeColor()),
        .BottomMenuHairlineColor(UIColor(red: 70.0/255.0, green: 70.0/255.0, blue: 80.0/255.0, alpha: 1.0)),
        .MenuItemFont(UIFont(name: "HelveticaNeue", size: 13.0)!),
        .MenuHeight(40.0),
        .MenuItemWidth(90.0),
        .CenterMenuItems(true)
    ]

    // Initialize scroll menu
    pageMenu = CAPSPageMenu(viewControllers: controllerArray, frame: CGRectMake(0.0, 0.0, self.view.frame.width, self.view.frame.height), pageMenuOptions: parameters)

    self.addChildViewController(pageMenu!)
    self.main_content_view.addSubview(pageMenu!.view)

    pageMenu!.didMoveToParentViewController(self)
}
 //here I am getting current index
func get_current_page() -> Int {
     let currentIndex = pageMenu!.currentPageIndex
    return currentIndex;
}

// MARK: - Container View Controller
override func shouldAutomaticallyForwardAppearanceMethods() -> Bool {
    return true
}

override func shouldAutomaticallyForwardRotationMethods() -> Bool {
    return true
}
}


这里我对所有段都使用Entrance_Content_ViewController类。在此控制器中,我为当前页面索引调用get_current_page()方法。

class Entrance_Content_ViewController: UITableViewController {

 override func viewDidLoad() {
 super.viewDidLoad()

 let entrance_main_controller = Entrance_main_controller()
    let page = entrance_main_controller.get_current_page()
    print("page no\(page)")

    self.tableView.registerNib(UINib(nibName: "EntranceTableViewCell",        bundle: nil), forCellReuseIdentifier: "EntranceTableViewCell")

        }


但我收到此错误-致命错误:在展开可选值(lldb)时意外发现nil
请帮我解决这个问题。
谢谢

最佳答案

您可以实现的基本思想是,维护每个段的数据数组。然后使用切换段索引,并根据段索引分配tableView DataSource。

粗略的代码应如下所示:

switch(segmentIndex)
 {
   case: 0 yourDatasourceArray = segment0_DataArray
                :
                :
   //like this for all segments.
}

10-08 14:53