我正在制作包含2个视图控制器的list-app 一个用表视图保存数组并显示它,第二个用textField,一个按钮函数将文本字段的文本追加到数组 在第一个视图控制器中显示新附加的字符串 继承我的代码:
class ViewController: UIViewController,UITableViewDataSource,UITableViewDelegate {
@IBOutlet weak var tableView: UITableView!
var exmpArray = ["DDDD","rrr","TTT"]
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
@IBAction func addBtnBar(_ sender: Any) {
performSegue(withIdentifier: "showMe", sender: nil)
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return exmpArray.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell")
cell?.textLabel?.text = exmpArray[indexPath.row]
return cell!
}}
,第二个是:
class SecondViewController: UIViewController {
@IBOutlet weak var myTextField: UITextField!
var realAry:[String] = []
override func viewDidLoad() {
super.viewDidLoad()
}
let myObj = ViewController()
@IBAction func addBtn(_ sender: Any) {
myObj.exmpArray.append(myTextField.text!)
print(myObj.exmpArray)
}
附加新单词后,它不会显示在第一个控制器中
答案 0 :(得分:1)
这一行存在一个问题:
let myObj = ViewController()
这会创建一个ViewController的新实例,它与调用您的视图控制器无关。摆脱那条线。这是错的。
您需要在SecondViewController
中设置一个委托属性,该属性指向ViewController
,为该委托定义符合的协议,并使用该协议以便SecondViewController
可以通知数组更改时它的委托。
在ViewController
中,添加一个prepareForSegue()函数,该函数接受目标视图控制器,将其强制转换为SecondViewController
类型,并将SecondViewController
委托设置为self。 / p>
答案 1 :(得分:0)
两个阵列都不同,您只是将第一个VC阵列复制到第二个VC阵列。数组是swift中的值类型。而不是创建2个数组使第一个VC阵列成为静态。
static var exmpArray = ["DDDD","rrr","TTT"]
现在你可以使用&通过调用如下所示在所有VC中更新此内容
FirstVC.exmpArray