Как отобразить первые значения ViewController во втором представлении таблицы ViewController с помощью модели в Swift - PullRequest
0 голосов
/ 28 мая 2020

Я создал модель адреса с помощью NSObject. в контроллере первого представления у меня есть кнопка для pu sh второго контроллера представления.

Модель адреса выглядит так:

 class ProfileModelUserAddress : NSObject, NSCoding{
var pincode : String!
var city : String!
var streetName : String!

init(fromDictionary dictionary: [String:Any]){
    pincode = dictionary["pincode"] as? String
    city = dictionary["city"] as? String
    streetName = dictionary["streetName"] as? String
}

func toDictionary() -> [String:Any]
{
    var dictionary = [String:Any]()

    if pincode != nil{
        dictionary["pincode"] = pincode
    }
    if city != nil{
        dictionary["city"] = city
    }
    if streetName != nil{
        dictionary["streetName"] = streetName
    }
    return dictionary
}

@objc required init(coder aDecoder: NSCoder)
{
    pincode = aDecoder.decodeObject(forKey: "pincode") as? String
    city = aDecoder.decodeObject(forKey: "city") as? String
    streetName = aDecoder.decodeObject(forKey: "streetName") as? String
}

@objc func encode(with aCoder: NSCoder)
{
    if pincode != nil{
        aCoder.encode(pincode, forKey: "pincode")
    }
    if city != nil{
        aCoder.encode(city, forKey: "city")
    }
    if streetName != nil{
        aCoder.encode(streetName, forKey: "streetName")
    }
}
}

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

self.localityName = placemark.locality ?? ""
self.sublocalityName = placemark.subLocality ?? ""
self.zipName = placemark.postalCode ?? ""

Во втором контроллере представления, как отображать значения контроллера первого представления в табличном представлении и его количество

var addressModel: ProfileModelUserAddress?

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    return modeladdress.count // here how to add count
 }
 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

     let cell: EditAddressTableViewCell = tableView.dequeueReusableCell(withIdentifier: "EditAddressTableViewCell") as! EditAddressTableViewCell
     let addr = addressModel.[indexPath.row]
     let street = addr?.streetName
     city   = addr?.city
     pincode = addr?.pincode

     cell.addressLabel.text = "\(city!) \(pincode!) \(street)"
     print("add address tableview cll \(cell.addressLabel.text)")
     return cell
 }

Изменить:

, если я добавлю, как показано ниже, город ответа, пин-код и т. Д. c .. как каждое поле идет отдельно, как показано ниже: мне нужны все поля в cell.addressLabel.text этой метке

enter image description here

1 Ответ

2 голосов
/ 28 мая 2020

Если ваше требование состоит в том, чтобы использовать один String для каждой строки, то вот как:

class SecondViewController: UITableViewController {

    var addressModelArray = [ProfileModelUserAddress]()

    override func viewDidLoad() {
        super.viewDidLoad()

        tableView.reloadData()
    }

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

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell: EditAddressTableViewCell = tableView.dequeueReusableCell(withIdentifier: "EditAddressTableViewCell") as! EditAddressTableViewCell
        let addressModel = addressModelArray[indexPath.row]
        var text = addressModel?.locality ?? ""
        text.append(addressModel?.subLocality ?? "")
        text.append(addressModel?.postalCode ?? "")
        cell.textLabel.text = text
        return cell
    }
}
...