我目前正在尝试在两个UINavigationControllers
之间传递数据,并在每个UITableViewController
附加UITabBarController
。我通过import UIKit
class placeData: Equatable {
var description : String
var selected : Bool
init (description : String, selected : Bool) {
self.description = description
self.selected = selected
}
}
class PlacesTabBarController: UITabBarController {
var placeDataArray = [placeData]()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
在这两个控制器之间导航。我一直试图在Changing VC issue in Swift. How to pass data between views in tab bar controller?上使用vacawama的解决方案。我正在使用以下代码。
UITableViewController
这是在tabBarController自定义类中。在另外两个控制器中,我声明要在视图控制器之间传递的数组,并使用链接中的方法填充var placeDataArray = [placeData]()
override func viewWillAppear(animated: Bool) {
placeDataArray = (self.tabBarController as PlacesTabBarController).placeDataArray
}
viewWillAppear
但是,当控制器加载时,数组为空。在链接的示例中,所有其余代码都在tableView
函数中,我需要将我的数组用于所有相应的 UITabBarController
| |
UINavigation UINavigation
Controller Controller
| |
UITableView UITableView
Controller Controller
函数。我不确定我是否只是在加载时将数组等于零。但我的想法是他们会重新填充。不知道正确的方法是什么。任何帮助都会很棒。
编辑:我目前的结构如下:
{{1}}
加载第一个标签时会填充数组。我想要做的是在第二个视图控制器中使用填充的数组,如果我在第二个视图控制器中编辑它,我希望编辑保留在第一个。所以我希望它通过引用传递。
答案 0 :(得分:1)
我会将UITabBarController
子类化,并使其成为两个UITableViewControllers
的委托。
protocol CustomTabBarDelegate {
var places:Array<placeData> { get set }
}
class CustomTabBarController: UITabBarController, CustomTabBarDelegate {
var places = Array<placeData>()
override func viewDidLoad() {
places = [PlaceData(),PlaceData()]
var table1 = CustomTableViewController()
var table2 = CustomTableViewController()
table1.delegate = self
table2.delegate = self
var navController1 = UINavigationController(rootViewController: table1)
var navController2 = UINavigationController(rootViewController: table2)
self.viewControllers = [navController1, navController2]
}
}
然后你的TableViewControllers
只是像这样访问委托数组。
class CustomTableViewController: UITableViewController {
var delegate:CustomTabBarDelegate!
override func viewDidAppear() {
self.tableView.reloadData()
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return delegate.places.count
}
}
在.reloadData()
之后,每个表格中都会显示对数组的任何更改 - 我在示例中设置CustomTableViewController
以在每次显示视图时重新加载数据,因此当您更改标签时,它们应该刷新以显示最新的更改。
值得一提的是,在一个单独的类中管理数据而不是在TabBarController中保存数组可能会更清晰。
答案 1 :(得分:0)
您可以随时使用app委托.. 在那里设置一个属性,并从应用程序的任何地方调用它。
let appDel: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
var yourNeededData = appDel.yourPassingAroundDataProperty