2015-05-07 3 views
0

Я надеюсь, что вы можете мне помочь в этом вопросе, как я немного застрял ...Swift: TableView контроллер и значение сегмента изменение

В моем приложении у меня есть простой контроллер Tableview с парой пользовательских ячеек прототипа ,

В одной из пользовательских ячеек прототипа у меня есть элемент управления сегментами с двумя значениями (в моем случае это температурные шкалы F/C).

Все отображается в порядке, я могу изменить значения (используя действие с измененным значением), но проблема возникает, когда я хочу «отправить» этот выбор на другой ViewController (через segue) из контроллера TableView (например, вернуться к предыдущий отображаемый контроллер, и это значение будет использоваться для отображения температуры в правой шкале в метке).

Если у меня есть переменная внутри пользовательской ячейки прототипа (userSelection), это не доступно в классе tableview.

Если я переведу действие «изменение значения» на контроллер таблицы, я, похоже, «потеряю» способность отслеживать, что изменилось.

я что-то упускаю, что «клеит» их вместе ...

Большое спасибо!

class ViewController: UIViewController { 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    @IBOutlet weak var label1: UILabel! 
    @IBOutlet weak var button1: UIButton! 
    @IBAction func pressButton1(sender: AnyObject) { 
    } 
} 


class TableViewController: UITableViewController { 
    override func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
     // #warning Potentially incomplete method implementation. 
     // Return the number of sections. 
     return 1 
    } 

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     // #warning Incomplete method implementation. 
     // Return the number of rows in the section. 
     return 1 
    } 

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     //let cell = tableView.dequeueReusableCellWithIdentifier("reuseIdentifier", forIndexPath: indexPath) as! UITableViewCell 
     var cell = tableView.dequeueReusableCellWithIdentifier("customcell") as! TableViewCell 
     return cell 
    } 

    class TableViewCell: UITableViewCell { 

    override func awakeFromNib() { 
     super.awakeFromNib() 
     // Initialization code 
    } 

    override func setSelected(selected: Bool, animated: Bool) { 
     super.setSelected(selected, animated: animated) 

     // Configure the view for the selected state 
    } 

    @IBOutlet weak var segment1: UISegmentedControl! 

    @IBAction func segmentValueChanged(sender: AnyObject) { 
     var userSelection = segment1.selectedSegmentIndex 
    } 
} 
+0

Вам нужно отслеживать состояния нескольких сегментов или только один? –

ответ

2

Если вам нужно только сообщить еще один экземпляр в то время, вы можете использовать шаблон делегирования:

Define протокол делегата:

protocol TableViewCellSegmentDelegate { 
    func segmentValueChanged(sender: UISegmentedControl) 
} 

В своей камере вид таблицы, определить переменную делегата, которую вы можете уведомить при изменении значения:

class TableViewCell: UITableViewCell { 
    var delegate: TableViewCellSegmentDelegate? 

    @IBAction func segmentValueChanged(sender: UISegmentedControl) { 
     if let delegate = delegate { 
      delegate.segmentValueChanged(sender) 
     } 
    } 
} 

В вашем представлении таблицы В tableView(_:cellForRowAtIndexPath:):

let cell = tableView.dequeueReusableCellWithIdentifier("customcell") as! TableViewCell 
cell.delegate = self 
return cell 

Реализация протокола в виде таблицы:

extension TableViewController: TableViewCellSegmentDelegate { 
    func segmentValueChanged(sender: UISegmentedControl) { 
     // do something with `sender.state` 
    } 
} 

Если вы хотите сообщить несколько экземпляров, вы могли бы сгореть NSNotification при изменении значения.

+0

Большое спасибо @ József !!!! Это сработало отлично! – Kostas

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