2015-06-24 2 views
1

У меня есть два контроллера вида: ManualViewController, AutomaticViewController В ManualViewController есть табличное представление с каждой ячейкой, имеющей метку и переключатель.Как получить доступ к ячейкам табличного вида вида из другого представления в Swift?

Как получить доступ к этим переключателям с помощью AutomaticViewController?

Heres мой код 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") 
     } 
    } 
} 

} 

`

ответ

1

Вы не хотите к ccess ячейки другого UIViewController, вы хотите получить доступ к источнику данных другого UIViewController.

Для автоматического просмотра данных ControlViewController вам понадобится ссылка на экземпляр ManualViewController, который вы создали, оттуда вы можете получить доступ к objectsNSMutableArray, но вы не указали, как два в настоящее время имеют ссылку друг на друга.

например.

var array = manualViewController.objects 

Это эффективно дает доступ к любым ячейкам в другом ViewController.

Чтобы получить доступ к коммутаторам, вы захотите сохранить их состояние в NSMutableArray. Поэтому, а не массив строк, есть массив словарей.

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

Тогда в вашем методе cellForRowIndexPath, вы можете получить доступ к государству, чтобы определить состояние переключателя и обновление, когда переключатель повернутые. Используя то, что я упоминал ранее, вы можете поделиться этими данными между двумя UIViewControllers.

+0

Большое вам спасибо! Не могли бы вы изменить мой полный код и опубликовать его? Я никогда не работал со словарями, и я хотел бы знать, как это сделать. Моя фактическая ситуация: у меня есть кнопка в AutomaticViewController. Когда эта кнопка нажата, она должна менять состояния переключателей в ManualViewController. –

+0

На этот вопрос был дан ответ. Если есть часть решения, о котором вы не уверены, я могу уточнить. В противном случае, я не могу написать код для вас. – Tim

+0

Мне удалось добавить словарь my self следующим образом: cell.deviceName.text = object ["label"] as? Строка cell.deviceState.setOn (объект ["switchState"] as! Bool, анимированный: false) Это сработало. Теперь, как я могу реализовать функцию WhatToDo, как узнать, какой переключатель нажат? –

0

Ну, Вы вопрос не является полным, потому что вы не говорите, как вы начинаете ваш«AutomaticViewController», но если вы используете SEGUE к запустите этот viewController, вы можете просто переслать данные ячейки (не объект ячейки) на следующий контроллер представления, обновить данные в AutomaticViewController, а затем использовать протокол для обновления данных таблицы в вашем ManualViewController

+0

У меня есть TabBarViewController, который обрабатывает ManualViewController и AutomaticeViewController. –

Смежные вопросы