【问题标题】:Reload Table View From Other View Controller After with SJSegmented使用 SJSegmented 后从其他视图控制器重新加载表视图
【发布时间】:2018-06-15 19:37:23
【问题描述】:

我有一个包含分段控制器(SJSegmented Controller)的第一个视图控制器。它带有一个功能,我可以知道用户在哪个段并更改加载另一个视图控制器数据的 php,但是当我到达包含表视图的视图控制器时,仅执行一次 Viewdidload 和 Viewdidappear并且在用户更改段后,不会加载 Viewdidload 和 Viewdidappear。

这是第一个视图控制器的代码,它是分段控制器。

func didMoveToPage(_ controller: UIViewController, segment: SJSegmentTab?, index: Int) {
    if selectedSegment != nil {
        selectedSegment?.titleColor(.gray)
    }
    if segments.count > 0 {
        selectedSegment = segments[index]
    }
    // Checks witch segment the user is at and change the php to load accordingly
    let CurrSeg = index
    print(CurrSeg)
    let Curr = String(CurrSeg)
    if Curr == "0" {
        UserDefaults.standard.set(“xyz.php”, forKey: "DealsPHP")
        UserDefaults.standard.synchronize()
    } else if Curr == "1" {
      //  UserDefaults.standard.set("hwy.php", forKey: "DealsPHP")
      //  UserDefaults.standard.synchronize()
    } else if Curr == "2" {
         UserDefaults.standard.set("uys.php", forKey: "DealsPHP")
         UserDefaults.standard.synchronize()
    } else if Curr == "3"  {
        UserDefaults.standard.set("wrt.php", forKey: "DealsPHP")
        UserDefaults.standard.synchronize()
    }
}

我希望在执行 didMoveToPage 时重新加载另一个视图控制器的表视图。

第二个视图控制器的代码(包括表格视图)

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    tableView.reloadData()
}

PS:当 didMoveToPage 被执行时,它会改变 php 并用改变的 php 加载相同的视图控制器。

这是填充表格视图的代码:

func get() {

    let DealsPHP: String = (UserDefaults.standard.object(forKey: "DealsPHP") as? String)!
    let url = URL(string: DealsPHP)
    let data = try? Data(contentsOf: url!)

    if data == nil {

        // Create the alert controller
        let alertController = UIAlertController(title: "No Internet Connection", message: "It looks like you aren't connected to the Internet. Please check your internet connection and try again.", preferredStyle: .alert)

        // Create the actions
        let okAction = UIAlertAction(title: "Try Again", style: UIAlertActionStyle.default) {
            UIAlertAction in

            self.get()
        }

        // Add the actions
        alertController.addAction(okAction)

        // Present the controller
        self.present(alertController, animated: true, completion: nil)
    } else {
        self.values = try! JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as! NSArray
        self.tableView.reloadData()
    }
}

【问题讨论】:

  • 与您的问题无关,但应该是super.viewDidAppear(animated)
  • 而且不需要UserDefaults.standard.synchronize()。
  • @sweepez 如果你看标题,这几乎是同一个问题
  • @LeoDabus 我看到了这个解决方案,但没有工作,因为 NotificationCenter.default.addObserver 设置在分段视图更改后未调用的 viewdidload 处。

标签: ios swift uitableview reload uisegmentedcontrol


【解决方案1】:

@sweepez 解决了这个问题。 我在 if Curr == "1" {} ** 中添加了这段代码 **func didMoveToPage 每次段改变时都会重新加载tableview的数据

let myController = controller as! YourControllerName
myController.get()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-13
    • 2015-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多