从另一个视图控制器访问在一个视图控制器中声明的变量
Access a variable declared in one view controller from another view controller
我想访问在 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
}
您可以通过将声明放在 ViewController 之外来声明全局变量。我不一定喜欢这个解决方案,但目前我能想到的是它。
您还可以创建一个通用的 class,将其导入到您的视图控制器中并通过通用方法访问变量。
这是一个快速超级简单的例子。
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
}
因为我认为初始代码不正确,所以对此进行了编辑。你一定能明白我的想法。
我想访问在 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
}
您可以通过将声明放在 ViewController 之外来声明全局变量。我不一定喜欢这个解决方案,但目前我能想到的是它。
您还可以创建一个通用的 class,将其导入到您的视图控制器中并通过通用方法访问变量。
这是一个快速超级简单的例子。
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
}
因为我认为初始代码不正确,所以对此进行了编辑。你一定能明白我的想法。