单击按钮后将名称附加到数组,然后将其发送到另一个视图控制器

Posted

技术标签:

【中文标题】单击按钮后将名称附加到数组,然后将其发送到另一个视图控制器【英文标题】:Append a name to array after a button is clicked and then send it to another view controller 【发布时间】:2021-04-12 18:20:16 【问题描述】:

我正在尝试在我的应用程序中创建一个收藏按钮,如果点击收藏的图像,它将将该地点的名称附加到一个数组中,然后将该数组传递给 UIViewController 内的表格视图。我已经让它传递了一个内部具有预定值的数组,但是当我尝试将名称附加到数组中然后传递它时,下一个视图控制器中的数组显示为空。

这是我的第一个视图控制器:

    var fave: [String] = []

    @IBAction func faveTapped(_ sender: UIButton) 
        fave.append(name)
        let defaults = UserDefaults.standard
        defaults.set(fave, forKey: "faves")
    

    override func viewDidLoad() 
        super.viewDidLoad()
    

我在我的第二个视图控制器中有这个表视图:

class nextViewController: UIViewController 
    
    var newArray: [String] = []

    @IBOutlet var tableView: UITableView!
    
    override func viewDidLoad() 
        super.viewDidLoad()
        
        if let oldArray: [String] = UserDefaults.standard.object(forKey: "faves") as? [String] 
            newArray = oldArray
        
        
        print(newArray)
    


extension FavouritesViewController: UITableViewDataSource 
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
        return newArray.count
    

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
        let rowcell = tableView.dequeueReusableCell(withIdentifier: "rowcell", for: indexPath)

        rowcell.textLabel?.text = newArray[indexPath.row]

        return rowcell
    

【问题讨论】:

如果它解决了您的问题,请接受答案。它可能会帮助某人 【参考方案1】:

当您追加新数据时,您不会保存到 UserDefaults。当viewDidLoad 执行时,数组仍然是空的。这样做:

@IBAction func faveTapped(_ sender: UIButton) 
    fave.append(name)
    let defaults = UserDefaults.standard
    defaults.set(fave, forKey: "faves")

【讨论】:

我已经这样做了,但现在我遇到了一个新问题,当我最喜欢一个地方时,表格不会更新,更新表格的唯一方法是我杀死应用程序并返回在。其次,它不会添加我点击的所有地方,只会将我点击的最后一个地方保存到数组中。 您是否从viewDidLoad 中删除了设置UserDefaults 的代码?另外,你是如何过渡到第二个 ViewController 的? 我从“viewDidLoad”中删除了它我有一个标签视图控制器,所以收藏夹页面位于我的第一个视图控制器标签旁边的标签上。 是的,我是这么想的。您需要将.object(forKey: "faves") 调用放在ViewWillAppear 的第二个ViewController 中。 ViewDidLoad 只被调用一次,因为它在 TabBarController 中 没有。只需将viewDidLoad 中的代码放入viewWillAppear 中,用于第二个 ViewController

以上是关于单击按钮后将名称附加到数组,然后将其发送到另一个视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

使用 Ionic 2,您如何通过登录后将您发送到另一个页面的模式来更改基于登录状态的按钮?

我可以将变量发送到贝宝,并在付款完成后将其发回给我吗?

Javascript:单击提交按钮时如何将隐藏的输入标签附加到表单中?

在按钮单击时附加 JSON 值

单击按钮后将值添加到不同的列

如何使用一个按钮切换 IMG 删除和附加?