2017-04-19 88 views
0

我想要访问在第二视图控制器,这也是一个tableviewcontroller一个tableviewcontroller访问在从另一个视图控制器的一个视图控制器声明的变量

var searchController:UISearchController? = nil 

override func viewDidLoad() { 
     super.viewDidLoad() 

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

声明的searchController变量,我要访问的来自第一个视图控制器的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 

    } 
+0

你的应用程序将崩溃与此代码!转到Apple的开发人员网站并下载示例代码UISearchController – Mannopson

+0

我现在有这种方式,它不会崩溃@Mannopson – juelizabeth

回答

1

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

+0

当我把它放在viewcontroller之外时,我无法访问viewcontroller中的变量。 – juelizabeth

+0

我其实并没有做好,我终于想出了如何做到这一点,并解决了您的解决方案。非常感谢你! – juelizabeth

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 
} 

编辑此,因为我认为最初的代码是不正确的。你可以明白我的想法。

相关问题