从另一个视图控制器访问一个视图控制器中声明的变量

时间:2017-04-19 23:16:07

标签: ios swift uisearchcontroller

我想访问tableviewcontroller中声明的searchController变量

var searchController:UISearchController? = nil

 override func viewDidLoad() {
        super.viewDidLoad()  

       let locationSearchTable = storyboard!.instantiateViewController(withIdentifier: "SegueTableViewController") as! SegueTableViewController
        searchController = UISearchController(searchResultsController: locationSearchTable)
        searchController?.searchResultsUpdater = locationSearchTable
}

在第二个视图控制器中,也是一个tableviewcontroller,我想从第一个视图控制器访问searchController。

  override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // #warning Incomplete implementation, return the number of rows


        if searchController.isActive && searchController.searchBar.text != ""{
            return filteredUsers.count
        }
        return self.usersArray.count

    }

2 个答案:

答案 0 :(得分:1)

您可以通过将声明放在ViewController之外来声明全局变量。我不一定喜欢这个解决方案,但此时它是我能想到的唯一一个。

答案 1 :(得分:1)

您还可以创建一个公共类,将其导入到两个视图控制器中,并通过常用方法访问变量。

这是一个简单的快速简单示例。

class centralDB: NSObject {

  private var commonSpace: String

  func returnSpace() -> String {
    return commonSpace
  }

  func setSpace(blah: String) {
    commonSpace = blah
  }
}

centDB = centralDB() // This is a global variable in centralDB

-------

import centralDB

class viewCon1 {
  centDB.setSpace("viewCon1 set this")
}

-----

import centralDB

class viewCon2 {
   centDB.returnSpace()
   print variableInCommon // shoould output ViewCon1
}

编辑此内容,因为我认为初始代码不正确。你可以得到我确定的想法。