如何从viewcontroller1(Swift)在viewcontroller2中追加列表并重新加载tableView



//第一个VC:

class ViewController: UIViewController {
let bookmark = BookmarkVC()
var bookmarkAppend = [" "]
@IBAction func addToBookmarks(_ sender: UIButton) {
if cityLabel.text != "city" && cityLabel.text != "" && !bookmark.bookmarkList.contains(cityLabel.text!){
bookmark.bookmarkList.append(cityLabel.text!)
//bookmarkAppend.append(cityLabel.text!)
//bookmark.tableView.reloadData()
performSegue(withIdentifier: "bookmarkSegue", sender: nil)
//bookmark.tableView.reloadData()
}
else {
return
}
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "bookmarkSegue" {
if let bookmarkVC = segue.destination as? BookmarkVC {
//detailVC.textToDisplay = bookmarkList[ip.row]
for i in bookmarkAppend {
bookmarkVC.bookmarkList.append(i)
}
}
}
}

//第二个VC:

class BookmarkVC: UIViewController {
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "segue2" {
if let detailVC = segue.destination as? DetailVC, let ip = tableView.indexPathForSelectedRow {
detailVC.textToDisplay = bookmarkList[ip.row]
}
}
}
var bookmarkList = ["London", "Paris", "Moskow", "Budapest", "Barcelona", "Milano", "Roma", "Ottawa", "Berlin", "New York"]
@IBOutlet weak var tableView: UITableView!

其余的代码运行良好。我的问题是,如果我在VC1中附加临时列表并将其与segue一起使用,不知何故,我无法限制列表中相同城市的数量。但是,如果我附加VC2列表,它就不会出现在表视图中。我想重新加载数据有问题。

您的代码无法工作,因为BookmarkVC()不是您期望的实例。

我的建议是在performSeguesender参数中传递新书签

class ViewController: UIViewController {
@IBAction func addToBookmarks(_ sender: UIButton) {
let city = cityLabel.text!
if !city.isEmpty && city != "city" {
performSegue(withIdentifier: "bookmarkSegue", sender: city)
}
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "bookmarkSegue" {
let city = sender as! String
let bookmarkVC = segue.destination as! BookmarkVC 
if !bookmarkVC.bookmarkList.contains(city) {
bookmarkVC.bookmarkList.append(city)
}
}
}

BookmarkVC中,您必须在viewDidLoad中重新加载表视图,因为这是保证出口连接的第一个地方

class BookmarkVC: UIViewController {
@IBOutlet weak var tableView: UITableView!
var bookmarkList = ["London", "Paris", "Moskow", "Budapest", "Barcelona", "Milano", "Roma", "Ottawa", "Berlin", "New York"]
override func viewDidLoad()
{
super.viewDidLoad()
tableView.reloadData()
}


如果书签已经存在,则必须不执行分段,则必须将书签保留在ViewController中,并将整个数组传递给BookmarkVC(我还是更喜欢(

class ViewController: UIViewController {
var bookmarkList = ["London", "Paris", "Moskow", "Budapest", "Barcelona", "Milano", "Roma", "Ottawa", "Berlin", "New York"]
@IBAction func addToBookmarks(_ sender: UIButton) {
let city = cityLabel.text!
if !city.isEmpty && city != "city" && !bookmarkList.contains(city) {
bookmarkList.append(city)
performSegue(withIdentifier: "bookmarkSegue", sender: nil)
}
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "bookmarkSegue" {
let bookmarkVC = segue.destination as! BookmarkVC 
bookmarkVC.bookmarkList = self.bookmarkList
}
}

class BookmarkVC: UIViewController {
@IBOutlet weak var tableView: UITableView!
var bookmarkList = [String]()
override func viewDidLoad()
{
super.viewDidLoad()
tableView.reloadData()
}

最新更新