gpt4 book ai didi

ios - Tableview 不会 reloadData()

转载 作者:行者123 更新时间:2023-11-29 00:54:48 33 4
gpt4 key购买 nike

伙计们?在这里需要一些帮助。我使用委托(delegate)协议(protocol)将一些字符串从“第二个 View Controller ”传回给它的前一个。

我的数组附加了我在委托(delegate)协议(protocol)上实现的方法中的字符串,但每次我按“添加”并返回到第一个屏幕时, TableView 都没有改变。我不确定字符串是不是在 View 之间传递,还是只是 TableView 没有重新加载。

代码很简单:

import UIKit

class EsseVaiReceber: UIViewController, UITableViewDataSource, UITableViewDelegate, PassInfoDelegate {

@IBOutlet var listaDeCoisasAFazer: UITableView!
var arrayInfo : [String] = []
var stringReceived: String = ""

override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
listaDeCoisasAFazer.reloadData()
print("SCREEN APPEARED")

}

override func viewDidLoad() {
super.viewDidLoad()
listaDeCoisasAFazer.reloadData()
print("LOADED SCREEN")
}

func passInfo(infothatwillpass: String) {
arrayInfo.append(infothatwillpass)
}


func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return arrayInfo.count
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as UITableViewCell!
let row = indexPath.row
let titulo = arrayInfo[row]
cell.textLabel!.text = titulo

return cell
}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if(segue.identifier == "add") {
let view = segue.destinationViewController as! EsseVaiPassar
view.delegate = self
}
}

}

和:

import Foundation
import UIKit

protocol PassInfoDelegate {
func passInfo(infothatwillpass: String)

}

class EsseVaiPassar: UIViewController {

@IBOutlet var campoTitulo: UITextField!
var delegate: PassInfoDelegate?
var textinput: String = ""


@IBAction func botaoAdicionarCoisasAFazer(sender: AnyObject) {

if campoTitulo == nil { return }
textinput = campoTitulo!.text!
print("TEXTO NO CAMPO:\(textinput)")

if delegate == nil {
print("DELEGATE IS NILL")
return
}

delegate!.passInfo(textinput)
print("TEXTO DO DELEGATE: \(textinput)")

if let navigation = self.navigationController {
navigation.popViewControllerAnimated(true)
print("INFO QUE VAI PASSAR: \(textinput)")
}
}
}

为什么 TableView 不会填充的任何想法?感谢先进 =)

最佳答案

tableView 使用 arrayInfo 作为 listaDeCoisasAFazer tableView 数据的来源(间接)。如果您更改arrayInfo,则需要将listaDeCoisasAFazer告知reloadData()

func passInfo(infothatwillpass: String) {
arrayInfo.append(infothatwillpass)
}

您可以/应该从 viewWillLoadviewDidLoad 中删除 reloadData(),因为数据源尚未更改,因此无需更改重新加载数据。

提示

您正在目标 viewController 中的 delegate 调用之前检查 nil。除非您这样做是出于调试目的,否则您只需调用 delegate?.passInfo(textinput) 即可。如果 delegate 为 nil,它将忽略该调用。

关于ios - Tableview 不会 reloadData(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37715326/

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