2015-03-26 3 views
0

Я новичок в Swift и работаю над небольшим проектом. У меня есть два UITableViewController: TableViewController и DetailViewController.новый для Swift: как обновить detailTextLabel? .text

Нажмите на ячейку TableViewController, чтобы перейти к DetailViewController. Щелкните мышью на ячейке DetailViewController, чтобы вернуться к TableViewController и обновить файл detailTextLabel? .text с выбранным элементом.

Проблема прямо сейчас, я не знаю, как обновить detailTextLabel? .text. Я могу передать выбранные данные из DetailViewController в TableViewController, но не знаю, как обновить ячейку.

class TableViewController: UITableViewController,DataSelectedDelegate{ 
    var sessions=[Session]() 

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

     self.sessions = [Session(Game: "Game", Detail: "SuperTrack"),Session(Game: "Type",Detail : "Race")] 


    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 
    func userSelectedInformatiom(info:NSString){ 
     //cell.detailTextLabel?.text=info 

    } 
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return self.sessions.count 
    } 
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let cell = self.tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as UITableViewCell 
     var session:Session 
     session=sessions[indexPath.row] 
     cell.textLabel?.text = session.Game 

     cell.detailTextLabel?.text = sessions[indexPath.row].Detail 
     return cell 

    } 

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     if segue.identifier == "showDetail"{ 
      let detailVC:DetailViewController = segue.destinationViewController as DetailViewController 
      detailVC.delegate=self 
     } 

    } 


} 

DetailViewController:

import UIKit 

protocol DataSelectedDelegate{ 
    func userSelectedInformatiom(info:NSString) 

} 
class DetailViewController: UITableViewController { 

     var types=[GameType]() 
     var test:String! 

     var delegate:DataSelectedDelegate? = nil 

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



      self.types = [GameType(Type:"Race"),GameType(Type:"Shoot"),GameType(Type:"Kid"),GameType(Type:"Adult")] 
     } 

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

     override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
      return types.count 
     } 

     override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
      //let identifier: String = "tableCell" 
      let cell = self.tableView.dequeueReusableCellWithIdentifier("Cells", forIndexPath: indexPath) as UITableViewCell 

      var type:GameType 
      type=types[indexPath.row] 
      cell.textLabel?.text = type.Type 
      return cell 
     } 

     override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
      //println("You selected cell #\(indexPath.row)!") 

      //let selectedCell = tableView.cellForRowAtIndexPath(indexPath) 
      //selectedCell?.accessoryType = .Checkmark 
      if (delegate != nil){ 
       let selectedIndex:NSString=types[indexPath.row].Type 
       delegate!.userSelectedInformatiom(selectedIndex) 
       self.navigationController?.popViewControllerAnimated(true) 
      } 
     } 

    } 

ответ

0

Есть несколько возможных решений:

  1. Вы можете передать выбранную ячейку detailViewController в prepareForSegue (sender объект является похлопал клетки). Затем вы можете передать эту информацию обратно в свой вызов делегата.
  2. Вы можете проверить indexPath выбранной строки в функции делегата userSelectedInformatiom через self.tableView.indexPathForSelectedRow(). С помощью этого indexPath вы получаете ячейку через cellForRowAtIndexPath.
  3. Вы можете сохранить ссылку на выбранную ячейку до Segue выполняется
  4. ...
+0

Спасибо !!! Это действительно полезно – Michael

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