gpt4 book ai didi

ios 重新加载 TableView

转载 作者:行者123 更新时间:2023-11-28 16:03:15 25 4
gpt4 key购买 nike

我正在第二个 viewController 上编辑电子邮件。如果我修改第二个 View (tableViewBudget)中的电子邮件地址,Label.text(在 ViewController 中)会发生变化,但 TableView Cell 不会改变。它始终显示 savedEmail.text 的第一个值。如何修改我的代码,以便当我更改其他 TableView 中的字符串时,tableView 单元格会发生变化?谢谢!

import UIKit

class ViewController:UIViewController,UITableViewDataSource,UITableViewDelegate {

@IBOutlet weak var savedEmail: UILabel!

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

@IBAction func exitToHere ( sender: UIStoryboardSegue){
}

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

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell")!
cell.textLabel?.text = savedEmail.text
return cell
}
}

第二 View Controller

import UIKit

class TableviewBudget: UIViewController {

@IBOutlet weak var emailField: UITextField!

override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
@IBAction func updateEmail(_ sender: Any) {
(presentingViewController as! ViewController).savedEmail.text =
self.emailField.text
}

@IBAction func hideKeyboard(_ sender: Any) {
self.emailField.resignFirstResponder()
}
override func viewWillAppear(_ animated: Bool) {
self.emailField.text = (presentingViewController as! ViewController).savedEmail.text

super.viewWillAppear(animated)
}

}

最佳答案

您可以使用委托(delegate)向第一个 UIViewController 发送回调,在您的案例类 ViewController 中,只要用户完成文本编辑。

在您的类 TableViewBudget 中将其更改为这样,这将创建一个委托(delegate)以将数据传递给先前的 View Controller

对于 Swift 3

protocol delegateVC{

func updateEmail(email : String)
}

class TableviewBudget: UIViewController{
//add this inside this class
var delegate : delegateVC?
...
}

现在把你的函数改成

@IBAction func updateEmail(_ sender: Any) {
self.delegate?.updateEmail(email: self.emailField.text)
}

现在在你的类 ViewController add-

class ViewController:UIViewController,UITableViewDataSource,UITableViewDelegate, delegateVC{

func updateEmail(email : String){
//update label here inside your first VC by getting the cell, using the indexPath of the cell that contains the E-mail
//also update your modal here to contain the next email otherwise if cellForRow gets called again, the e-mail field will get reset
cell.textLabel?.text = email
}
}

当您从 ViewController 推送 TableViewBudget 时,还请记住在您的 prepareForSegue 中设置此委托(delegate),例如

let tableViewBudget = TableViewBudget()
tableViewBudget.delegate = self

关于ios 重新加载 TableView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40688676/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com