大家好在这里需要一些帮助。我使用委托协议将一些字符串从“第二个视图控制器”传递回前一个。
我的数组附加了我在委托协议上实现的方法中的字符串,但是每当我按“添加”并返回到第一个屏幕时,表视图都不会改变。我不确定字符串是否在视图之间不传递,或者只是表视图没有重新加载。
代码很简单:
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使用arrayInfo
作为listaDeCoisasAFazer
tableView数据的源(间接)。如果更改arrayInfo
,则需要将listaDeCoisasAFazer
告知reloadData()
。
func passInfo(infothatwillpass: String) {
arrayInfo.append(infothatwillpass)
}
您可以/应该从
reloadData()
和viewWillLoad
中删除viewDidLoad
,因为dataSource尚未更改,因此无需重新加载数据。小费
您要在目标viewController中的
nil
调用之前检查delegate
。除非您出于调试目的这样做,否则可以简单地调用delegate?.passInfo(textinput)
。如果委托为nil,它将忽略该调用。关于ios - Tableview不会reloadData(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37715326/