【问题标题】:Transfer data from one TableView to another TableView by pressing the button通过按下按钮将数据从一个 TableView 传输到另一个 TableView
【发布时间】:2020-10-11 10:27:37
【问题描述】:

传输操作数据。错误是我无法访问第二个 TableView 中的变量。

错误:无法分配类型“Fav?”的值类型“[Fav]”和实例成员“getFav”不能用于类型“FavouriteTableVC”;您的意思是改用这种类型的值吗?

结构数据

struct Fav {
    var image: UIImage?
    var name: String
    var price: String
    
    static let favName = ["Faaaak", "Dunc"]
    
    static func getFav() -> [Fav] {
        
        var favourites = [Fav]()
        
        for fav in favName {
            favourites.append(Fav(image: nil, name: fav, price: "29.000"))
        }
        return favourites
    }
}

第一个表格单元


class DivanCell: UITableViewCell {
    
    var fav: Fav?

    @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(favNext: FavouriteTableVC())
    }
    
    func favTapped(favNext: FavouriteTableVC) {
        fav = Fav(image: divanPhoto.image, name: divanNameLabel.text!, price: priceLabel.text!)
        FavouriteTableVC.getFav = fav // Error: Cannot assign value of type 'Fav?' to type '[Fav]' and Instance member 'getFav' cannot be used on type 'FavouriteTableVC'; did you mean to use a value of this type instead?
    }

}

第二个 TableViewVC


class FavouriteTableVC: UITableViewController {
    
    var getFav = Fav.getFav()

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

    @IBOutlet weak var favName: UILabel!
    @IBOutlet weak var favPrice: UILabel!
    @IBOutlet weak var favImage: UIImageView!

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

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "favouriteCell", for: indexPath) as! FavouriteTableViewCell

        let favs = getFav[indexPath.row]
               
        cell.name.text = favs.name
        cell.price.text = favs.price
        cell.favImage.image = favs.image
        tableView.reloadData()
        return cell
    }
    
    override func viewWillAppear(_ animated: Bool) {
        
        tableView.reloadData()
    }

// FavouriteTableViewCell

class FavouriteTableViewCell: UITableViewCell {

    @IBOutlet weak var name: UILabel!
    @IBOutlet weak var price: UILabel!
    @IBOutlet weak var favImage: UIImageView!

}

【问题讨论】:

  • 不要在DivanCell 中添加favTapped 方法,而是将其添加到ViewController,您可以使用按钮tag 属性来识别索引并从数组中获取数据。然后您可以通过导航轻松传递此信息到FavouriteTableVC
  • 我的应用逻辑不一样。不用通过导航,我有tabBarController
  • 在这里发布代码时要格式化,太混乱了。另外,FavouriteTableViewCell 声明在哪里?

标签: ios swift iphone xcode uitableview


【解决方案1】:

代码中有两个错误导致错误。

Cannot assign value of type 'Fav?' to type '[Fav]' 是在您尝试将 Fav? 类型的对象分配给 [Fav] 时引起的。

Instance member 'getFav' cannot be used on type 'FavouriteTableVC'; did you mean to use a value of this type instead? 是因为你试图分配变量而不创建对象。

用下面的代码替换 favTapped(favNext: FavouriteTableVC) 方法。希望这能解决您的问题。

func favTapped(favNext: FavouriteTableVC) {
    if let tempFav = Fav(image: divanPhoto.image, name: divanNameLabel.text!, price: priceLabel.text!){
       favNext.getFav = [tempFav] 
       fav = tempFav
    }
}

【讨论】:

  • 条件绑定的初始化器必须是可选类型,而不是'Fav'
  • 无条件,错误依旧,因为数组原因
  • 对不起。我的错误,忘记将其保存为数组。答案已更新。检查一次。
  • Noooooooooooooo
猜你喜欢
  • 2018-03-14
  • 1970-01-01
  • 1970-01-01
  • 2017-04-16
  • 1970-01-01
  • 1970-01-01
  • 2017-03-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多