2017-08-28 1 views
-1

Ich habe ersten View-Controller (FirstView Controller), auf denen zwei TextFields und ein TableView, die TableViewCell mit Label enthalten. Und ich habe einen zweiten View-Controller (TypeViewController), der auch TableView mit TableViewCell enthält, die ein Label enthalten.Ändern Sie den Text des Labels auf TableViewCell

Auf FirstViewController wählen TableViewCell mit Text wählen -> gehen auf Sicht TypeViewController

Auf TypeViewController TableViewCell wählen (auf TypeViewController i Liste von Zellen haben, dass die Belastung dynamisch) -> zu FirstViewController zurück und anstelle von Text Wählen Sie, um den Text anzuzeigen, der auf TypeViewController ausgewählt wurde.

Wie kann ich den Text des Labels auf TableViewCell auf dem FirstViewController zu Text aus dem TypeViewController ändern? Controller-

First View

import UIKit 

class FirstViewController: UIViewController, UITextFieldDelegate, UITableViewDataSource, UITableViewDelegate { 

    var animalTypeName: String?; 

    var selectedTypeId: UInt?; 
    var selectedTypeName: String?; 

    override func viewDidLoad() { 
     super.viewDidLoad(); 
    } 

    // MARK: TableView && TableViewCell Methods 
    // Row display. 
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return 1; 
    } 

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

     let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! FirstTableViewCell; 
     animalTypeName = "Choose"; 
     cell.typeName.text = animalTypeName; 

     return cell; 
    } 

    //MARK: - Navigation 
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 

     super.prepare(for: segue, sender: sender) 

     switch(segue.identifier ?? "") { 
      case "ShowType": 
       guard segue.destination is TypeViewController else { 
       fatalError("Unexpected destination: \(segue.destination)"); 
       } 
      default: 
       fatalError("Unexpected Segue Identifier; \(String(describing: segue.identifier))"); 
     } 
    } 

    //MARK: Actions 
    @IBAction func unwindToCreateMedicamentController(sender: UIStoryboardSegue) { 
     if let typeViewController = sender.source as? TypeViewController, let type = typeViewController.type { 

      selectedTypeName = type.name; 
      selectedTypeId = type.animalTypeId; 
      animalTypeName = selectedTypeName; 
     } 
    } 
} 

TypeViewController

import UIKit 

class TypeViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { 

    @IBOutlet weak var tableView: UITableView! 

    var typeList: [AnimalType]?; 
    var type: AnimalType?; 
    let typeController = AnimalTypeController(); 

    override func viewDidLoad() { 
     super.viewDidLoad(); 
     // Call method to get array of AnimalType items. 
     getArrayOfTypeItems(); 
    } 

    //MARK: - Table view data source 
    func numberOfSections(in tableView: UITableView) -> Int { 
     return 1; 
    } 

    // Row display. 
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return typeList?.count ?? 0; 
    } 

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

    // Table view cells are reused and should be dequeued using a cell identifier. 
    let cellIdentifier = "TypeTVCell"; 

    guard let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as? TypeTableViewCell else { 
     fatalError("The dequeued cell is not an instance of TypeTVCell."); 
    } 

     let typeItem = typeList?[indexPath.row]; 
     cell.nameOfType.text = typeItem!.name; 

     return cell; 
    } 

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 

     super.prepare(for: segue, sender: sender) 

     switch(segue.identifier ?? "") { 
     case "ChooseType": 
      guard segue.destination is CreateMedicamentController else { 
       fatalError("Unexpected destination: \(segue.destination)"); 
      } 

      guard let selectedTypeCell = sender as? TypeTableViewCell else { 
       fatalError("Unexpected sender: \(String(describing: sender))"); 
      } 

      guard let indexPath = tableView.indexPath(for: selectedTypeCell) else { 
       fatalError("The selected cell is not being displayed by the table"); 
     } 
      let selectedType = typeList?[indexPath.row]; 
      type = selectedType; 

     default: 
      fatalError("Unexpected Segue Identifier; \(String(describing: segue.identifier))") 
     } 
    } 
} 

This`s an example of my views

+0

Sie delegieren einstellen müssen. –

+0

Dies muss eine der häufigsten iOS-Fragen zu SO sein. https://medium.com/@jamesrochabrun/implementing-delegates-in-swift-step-by-step-d3211cbac3ef – toddg

Antwort

0
class FirstViewController: UIViewController, UITextFieldDelegate, UITableViewDataSource, UITableViewDelegate { 

    var animalTypeName: String?; 

    var selectedTypeId: UInt?; 
    var selectedTypeName: String?; 

    @IBOutlet weak var tableView: UITableView! 

    override func viewDidLoad() { 
     super.viewDidLoad(); 
     animalTypeName = "Choose"; 
    } 

    // MARK: TableView && TableViewCell Methods 
    // Row display. 
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return 1; 
    } 

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

     let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! FirstTableViewCell; 
     cell.typeName.text = animalTypeName; 

     return cell; 
    } 

    //MARK: - Navigation 
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 

     super.prepare(for: segue, sender: sender) 

     switch(segue.identifier ?? "") { 
      case "ShowType": 
       guard segue.destination is TypeViewController else { 
        fatalError("Unexpected destination: \(segue.destination)"); 
       } 
      default: 
       fatalError("Unexpected Segue Identifier; \(String(describing: segue.identifier))"); 
     } 
    } 

    //MARK: Actions 
    @IBAction func unwindToCreateMedicamentController(sender: UIStoryboardSegue) { 
     if let typeViewController = sender.source as? TypeViewController, let type = typeViewController.type { 

      selectedTypeName = type.name; 
      selectedTypeId = type.animalTypeId; 
      animalTypeName = selectedTypeName; 

      tableView.reloadData(); 
     } 
    } 
} 
  1. Verschieben animalTypeName = "Choose"; zu viewDidLoad: ed den Folowing Code hinzuzufügen.
  2. hinzufügen @IBOutlet weak var tableView: UITableView! in FirstViewController
  3. hinzufügen tableView.reloadData() in unwindToCreateMedicamentController(sender: UIStoryboardSegue)
1

Im viewDidLoad Methode s Sie ne

tableView.dataSource = self 
tableView.delegate = self 
Verwandte Themen