2017-04-19 89 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 
} 

編輯此,因爲我認爲最初的代碼是不正確的。你可以明白我的想法。

相關問題