Ios 如何在Swift中从另一个视图访问视图的表视图的单元格?

Ios 如何在Swift中从另一个视图访问视图的表视图的单元格?,ios,swift,uitableview,Ios,Swift,Uitableview,我有两个视图控制器:手动视图控制器、自动视图控制器 ManualViewController有一个表格视图,每个单元格都有一个标签和一个开关 如何从AutomaticViewController访问这些交换机 以下是我的手册ViewController代码: import UIKit class ManualViewController: UIViewController,UITableViewDelegate,UITableViewDataSource { @IBOutlet wea

我有两个视图控制器:手动视图控制器、自动视图控制器 ManualViewController有一个表格视图,每个单元格都有一个标签和一个开关

如何从AutomaticViewController访问这些交换机

以下是我的手册ViewController代码:

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")
        }
    }
 }

}

`

好吧,你的问题不完整,因为你没有说如何启动“AutomaticViewController”,但如果你使用Segue启动这个viewController,你只需将单元格数据(而不是单元格对象)转发到下一个view controller,更新AutomaticViewController中的数据,然后使用协议更新ManualViewController中的tableview数据

如果不想访问另一个UIViewController的单元格,则要访问另一个UIViewController的数据源

AutomaticViewController将需要对您创建的ManualViewController实例的引用,从那里您可以访问
对象
NSMutableArray
,但您尚未指定这两个实例当前如何相互引用

e、 g

这有效地让您可以访问其他ViewController中的任何单元格

为了访问交换机,您需要将其状态存储在NSMutableArray中。因此,与其说是字符串数组,不如说是字典数组

var objects = [["label" : "iPhone", "switchState": true],["label" : "Apple Watch", "switchState": true],["label" : "Mac", "switchState": true]]

然后在cellForRowIndexPath方法中,您可以访问状态以确定开关状态,并在点击开关时更新该状态。使用我前面提到的,您可以在两个UIViewController之间共享数据。

非常感谢!你能修改我的完整代码并发布吗?我从未使用过字典,我想知道如何使用。我的实际情况是,我在AutomaticViewController中有一个按钮。按下此按钮时,应更改ManualViewController中的开关状态。问题已回答。如果有一部分解决方案您不确定,那么我可以详细说明。否则,不,我无法为您编写代码。我自己设法添加了字典,如下所示:cell.deviceName.text=object[“label”]as?字符串cell.deviceState.setOn(对象[“switchState”]为!Bool,动画:false)它工作了。现在我如何实现WhatToDo函数,如何知道按下了哪个开关;您可以在退出单元格队列时在每个交换机上设置标记,也可以通过查看交换机的超级视图来获取单元格,找到单元格并向tableView询问该单元格的indexPath。这个答案在Objective-C中,但应该有助于指导您正确的方向:我有一个TabBarViewController,它处理ManualViewController和AutomaticeViewController。
var objects = [["label" : "iPhone", "switchState": true],["label" : "Apple Watch", "switchState": true],["label" : "Mac", "switchState": true]]