Передача данных из одного TableView в другой TableView - PullRequest
1 голос
/ 21 июня 2020

Мне нужно передать данные в другой TableView одним нажатием кнопки, но я не понимаю, как это сделать.

Вам нужно передать данные другому TableViewController и сохранить их в переменной.

Я должен передать массив данных

import UIKit

class DivanCell: UITableViewCell {
    
    var favFurniture: Furniture?

    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }
    @IBOutlet weak var divanNameLabel: UILabel!
    @IBOutlet weak var divanPhoto: UIImageView! 
    @IBOutlet weak var priceLabel: UILabel!
    @IBOutlet weak var sizeDivan: UILabel!
    @IBOutlet weak var favButton: UIButton!
    @IBAction func favTapped(_ sender: Any) {
        favButton.setImage(UIImage(systemName: "heart.fill"), for: UIControl.State.normal)
        favTapped()
    }
    
    func favTapped() {
        favFurniture = (Furniture(name: divanNameLabel.text!, type: "Divan", image: divanPhoto.image!, price: priceLabel.text!))
        FavouriteTableViewCell().favFurniture = favFurniture
    }
    
    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)
        
        // Configure the view for the selected state
    }

}

в это tableview


class FavouriteTableViewCell: UITableViewCell {
    
    var favFurniture = Furniture?

    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
    }

}

Ответы [ 2 ]

0 голосов
/ 21 июня 2020

Насколько я могу судить, ваша проблема здесь:

func favTapped() {
        favFurniture = (Furniture(name: divanNameLabel.text!, type: "Divan", image: divanPhoto.image!, price: priceLabel.text!))
        FavouriteTableViewCell().favFurniture = favFurniture
    }

Кажется, вы не поняли основ OOP.

Краткий ответ:

Вы вызываете этот метод и инициализируете внутри него новый FavouriteTableViewCell. Как вы планируете использовать этот экземпляр, который вы только что создали, вне этого метода? Или, может быть, не нужно снова обращаться к нему? Тогда я ошибаюсь и можно поступить так. Изменения этого экземпляра должны быть видны внутри этого метода.

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

Мой пример выше должен прояснить, как действовать.

Вот пример вашего кода, который компилируется: Примечание: я не пытался запускать его, так как мне не хотелось создавать все необходимые зависимости.

class DivanCell: UITableViewCell {
    
    var favFurniture: Furniture?

    @IBOutlet weak var divanNameLabel: UILabel!
    @IBOutlet weak var divanPhoto: UIImageView!
    @IBOutlet weak var priceLabel: UILabel!
    @IBOutlet weak var sizeDivan: UILabel!
    @IBOutlet weak var favButton: UIButton!
    @IBAction func favTapped(_ sender: Any) {
        favButton.setImage(UIImage(systemName: "heart.fill"), for: UIControl.State.normal)
        favTapped()
    }
    
    func favTapped() {
        favFurniture = (Furniture(name: "name", type: "Divan", image: "image", price: "price"))
        
        // As you create the instance of FavouriteTableViewCell in here it will also only be visible in here
        FavouriteTableViewCell().favFurniture = favFurniture
    }
    
    func favTappedNew(favTableViewCell: FavouriteTableViewCell) {
        favFurniture = (Furniture(name: "name", type: "Divan", image: "image", price: "price"))
        
        // Now the instance of FavouriteTableViewCell that you passed to this method is altered and you can access it outside
        favTableViewCell.favFurniture = favFurniture
    }

}

class FavouriteTableViewCell: UITableViewCell {
    
    var favFurniture:Furniture?

}

class Furniture {
    var name: String
    var type: String
    var image: String
    var price: String
    
    init(name: String, type: String, image: String, price: String) {
        self.name = name
        self.type = type
        self.image = image
        self.price = price
    }
}

0 голосов
/ 21 июня 2020

Этот пример действительно работает и должен дать вам понимание того, как это сделать:

class First {
    var a = "a"
    var b = "b"
    var c = "c"
    
    init() {
        self.getsTapped(second: Second())
    }
    
    func getsTapped(second: Second) { // call this function on your tapped object
        print(second.data) // will show you the empty array
        second.data = [self.a,self.b,self.c]
        print(second.data) // now that array contains values
    }
    
}


public class Second {
    var data: Array<String> = []
}

let first = First()

Вы создаете функцию, которую вызываете где угодно. Я сделал это в init (), вы, вероятно, захотите вызвать его на своей кнопке при нажатии. Передайте ему ссылку на второй класс (которому вы хотите передать значения), а затем позвольте ему сделать magi c. Примечание: я создал новый экземпляр второго класса при вызове функции. Это явно не сработает для вас. Вам нужно запустить экземпляр снаружи, чтобы у вас была ссылка на этот класс и вы могли получить к нему доступ в другом месте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...