如何使用详细信息视图中的信息更新UITableViewCell?

时间:2016-10-16 19:38:11

标签: ios

我正在开发一款应用,我想让它看起来像iOS上的设置页面:

enter image description here

我想要复制的行为是在单元格中找到的行为" From / To"和#34;允许来自"。如果您注意到,那些单元格会显示用户插入的数据。我怎么能复制那个?

首先,我对iOS很新,所以无论我想出什么,都可能不是我案例的最佳解决方案。

这就是我的想法(向右添加标签并设置其值):

enter image description here

这是最好的方法吗?另外,我该如何设置该值?用户从详细信息视图返回后应该如何更新该单元格?

1 个答案:

答案 0 :(得分:1)

当详细信息视图中的某些值发生更改时,您基本上希望更新上一个视图中的内容(我们称之为FirstViewController)。一种可行的方法是通过Protocols and Delegates。假设您已经知道storyboardssegues这里有一个例子。在UILabel中按下按钮时,此示例只会更改FirstViewControllerDetailViewController的文字。

让我们从DetailViewController开始。您希望观察此场景中的更改并相应地更新其他场景中的数据。因此,您需要在此课程中定义protocol

protocol DetailDelegate {
    func updateCellWith(_ data:String)
}

这个类的完整定义如下所示:

import UIKit

protocol DetailDelegate {
    func updateCellWith(_ data:String)
}

class DetailViewController: UIViewController {

var delegate: DetailDelegate?

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.
}

//On button tap the cell content will change in the previous scene through the delegate method
@IBAction func didTapBtn(_ sender: AnyObject) {
    delegate?.updateCellWith("Cell updated")
}
}

FirstViewController将是delegate的{​​{1}},并且符合DetailViewController。您将在转换前将DetailDelegate设置为FromViewController的代理。

DetailViewController

点击按钮,class FirstViewController: UIViewController, DetailDelegate { @IBOutlet weak var tableView: UITableView! override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. } // Mark Navigation @IBAction func moveToDetailVC(_ sender: AnyObject) { performSegue(withIdentifier: "detail", sender: indexPath) } override func prepare(for segue: UIStoryboardSegue, sender: Any?) { let vc = segue.destination as! DetailViewController vc.delegate = self } } 会通过委托方法DetailViewController将字符串Cell updated传递给FirstViewController