Добавить информацию / детали в строку TableView - PullRequest
0 голосов
/ 09 февраля 2019

У меня есть TableView с элементами на первом ViewController.Когда я нажимаю на строку, я выполняю переход, чтобы отобразить второй ViewController с TextField на нем.Теперь я хочу записать информацию в TextField и связать эту информацию с выбранной строкой из первого ViewController.Чтобы информация1 отображалась при нажатии строки1, а информация2 - при нажатии строки2 и т. Д.Я не хочу иметь столько ViewControllers, сколько Items, так что мне интересно, как лучше это решить?

Ответы [ 3 ]

0 голосов
/ 09 февраля 2019

объявите глобальный public var content:String? в вашем назначении View Controller

в func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) вашего parentViewController, напишите это перед выполнением segue:

let destVC = YourDestinationVC()
destVC.content = "content pertaining to cell selected"

// if the segue name is called segueOne
destinationVC.performSegueWithIdentifier("segueOne", sender: self)

Это выполнит переход с предустановленнымДанные

0 голосов
/ 09 февраля 2019

Как я понял, ваш вопрос больше о том, как спроектировать ваше приложение так, чтобы его было легко поддерживать.Вот мое предложение:

//1. Create a structure to hold the data
struct Information{
    let cellTitle : String
    let messageToDisplay : String

    init(cellTitle: String, messageToDisplay: String){
        self.cellTitle = cellTitle
        self.messageToDisplay = messageToDisplay
    }
}

class ViewController: UIViewController {

    @IBOutlet weak var tableView: UITableView!

    //2. Create a datasource array
    let datasource : [Information] = [Information(cellTitle: "Cell1", messageToDisplay: "Message To Display on for Cell1"),
                                    Information(cellTitle: "Cell2", messageToDisplay: "Message To Display on for Cell2"),
                                    Information(cellTitle: "Cell3", messageToDisplay: "Message To Display on for Cell3")]

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

extension ViewController : UITableViewDelegate{
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){
        performSegue(withIdentifier: "ShowSecondViewController", sender: self)
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        let indexPath = tableView.indexPathForSelectedRow

        if segue.identifier == "ShowSecondViewController" {
            let vc = segue.destination as! SecondViewController
            //3.0 Create a variable in your destination Viewcontroller and set it here
            vc.messageToShow = datasource[(indexPath?.row)!].messageToDisplay

        }
    }
}
0 голосов
/ 09 февраля 2019

Вам нужен только 1 VC в качестве места назначения segue с переменной, которую вы установили из prepare method

let arr = [YourModel(name:"ppp",age:11),YourModel(name:"ppp",age:14)]

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    performSegue(withIdentifier: "YourSegue", sender: arr[indexPath.row])
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "YourSegue" {
        let des = segue.destination as! DetailVC
        des.item = sender as! YourModel

    } 
}

struct YourModel {
    let name: String
    let age: Int 
}

class DetailVC:UIViewController { 
   var item:YourModel?
}
...