【问题标题】:Use segmented control to switch *and refresh* subviews使用分段控制切换*和刷新*子视图
【发布时间】:2015-09-25 15:39:22
【问题描述】:

我正在使用分段控件来补充选项卡控制器并在该部分中添加额外的选项。

分段控制在三个容器之间切换,每个容器都有一个嵌入式 tableviewcontainer,我根据需要通过显示/隐藏在它们之间切换:

@IBOutlet var listPicker: UISegmentedControl! 
@IBOutlet var dueView: UIView!
@IBOutlet var nextView: UIView!
@IBOutlet var doneView: UIView!

switch sender.selectedSegmentIndex{
        case 0: 
        dueView.hidden = false
        nextView.hidden = true
        doneView.hidden = true
    ...
    }

每个视图都链接到故事板中的一个 UITableViewController:

除了显示(取消隐藏)视图(正在工作)之外,有没有办法以与标签栏控制器相同的方式刷新其内容?

【问题讨论】:

  • 所有这些视图都包含 UITableView 吗?
  • 它们包含 UITableViewControllers。我将添加故事板的屏幕截图。
  • 我会避免创建图层,我会在 UINavigationController 中有一个 UITableViewController,segmentedControl 会更改数据源和委托
  • 不要玩弄显示/隐藏。只需重置 tableview 数据源对象并重新加载它

标签: ios xcode swift uiview uisegmentedcontrol


【解决方案1】:

首先打印以下内容:

print(self.childViewControllers)

然后您将知道 ViewController 的子索引,然后使用以下内容

    @IBAction func segmentValueChanged(sender: AnyObject) {


        switch (sender.selectedSegmentIndex) {
  case 0:
       dueView.hidden = false
        nextView.hidden = true
        doneView.hidden = true
 // create object from your nextView and refresh it
    var myClass : ViewController = self.childViewControllers[0] as! ViewController
    myClass.tableView.reloadData()
    myClass.viewWillAppear(false)

   break;


  default:
    break;
       }


    }

假设您有以下容器及其持有ViewControllers

dueView.hidden = false
nextView.hidden = true
doneView.hidden = true

如果它在情节提要的视图中排序,如 1-dueView 然后 2-nextView 3-doneView 那么索引应该是,但这完全取决于您如何对它们进行排序以显示:

 dueView : self.childViewControllers[0]
 nextView : self.childViewControllers[1]
 doneView : self.childViewControllers[2]

更新:

由于您在视图控制器之前有导航控制器,因此您可能需要强制转换以获取顶视图控制器,然后重新加载数据。

祝你好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-18
    • 2015-04-20
    • 1970-01-01
    • 1970-01-01
    • 2021-07-26
    • 2015-08-06
    • 2013-04-10
    • 1970-01-01
    相关资源
    最近更新 更多