我有两个视图控制器:ManualViewController,AutomaticViewController ManualViewController有一个表视图,每个单元格都有一个标签和一个开关。
如何从AutomaticViewController访问这些开关?
继承我的ManualViewController代码:
import UIKit
class ManualViewController: UIViewController,UITableViewDelegate,UITableViewDataSource {
@IBOutlet weak var tableView: UITableView!
var objects: NSMutableArray! = NSMutableArray()
override func viewDidLoad() {
super.viewDidLoad()
self.navigationController?.navigationBarHidden = false
self.navigationController?.navigationBar.barTintColor = UIColor.blackColor()
self.navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.whiteColor()]
self.tabBarController?.tabBar.barTintColor = UIColor.blackColor()
// Do any additional setup after loading the view.
self.objects.addObject("iPhone")
self.objects.addObject("Apple Watch")
self.objects.addObject("Mac")
self.tableView.reloadData()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
return self.objects.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
let cell = self.tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! TableViewCell
cell.deviceName.text = self.objects.objectAtIndex(indexPath.row) as? String
cell.deviceState.tag = indexPath.row;
return cell
}
@IBAction func whatToDo(sender: UISwitch) {
var c = sender.tag
if c == 2
{
if sender.on
{
println("on")
}
else
{
println("off")
}
}
}
}
`
答案 0 :(得分:1)
您不想访问其他UIViewController的单元格,您想要访问其他UIViewController
的数据源。
AutomaticViewController将需要对您创建的ManualViewController实例的引用,从那里您可以访问objects
NSMutableArray
,但您尚未指定两者当前如何相互引用。
e.g。
var array = manualViewController.objects
这有效地允许您访问另一个ViewController中的任何单元格。
要访问开关,您需要将其状态存储在NSMutableArray中。因此,不是一个字符串数组,而是有一个字典数组。
var objects = [["label" : "iPhone", "switchState": true],["label" : "Apple Watch", "switchState": true],["label" : "Mac", "switchState": true]]
然后在您的cellForRowIndexPath方法中,您可以访问状态以确定开关状态,并在点击开关时更新该状态。使用我之前提到的,然后您可以在两个UIViewControllers之间共享该数据。
答案 1 :(得分:0)
嗯,你的问题是不完整的,因为你没有说你如何启动你的“AutomaticViewController”但是如果你使用Segue启动这个viewController,你可以简单地转发单元格数据(不是单元格对象)下一个视图控制器,更新AutomaticViewController中的数据,然后使用协议更新ManualViewController中的tableview数据