我有一个tableView包含两个单元格。第一个单元格包含一个标签,第二个单元格包含一个DatePicker。第一个单元格使用类:TableView不更新与ReloadData()
import UIKit
class cell1: UITableViewCell {
@IBOutlet weak var label1: UILabel!
}
另一个小区使用类:
import UIKit
class cell2: UITableViewCell {
@IBOutlet weak var outletPicker: UIDatePicker!
@IBAction func actionPicker(sender: AnyObject) {
let storyBoard = UIStoryboard(name : "Main" , bundle: nil)
let view = storyBoard.instantiateViewControllerWithIdentifier("ViewController") as! ViewController
view.lblString = String(outletPicker.date)
view.tableView.reloadData()
view.tableView.layoutIfNeeded()
}
}
正如您在DatePickerAction看到我要换第一小区的标签。在mainClass(“TableViewController类”)中,我定义了一个名为lblString的字符串。并改变它。 MainClass代码如下所示。
import UIKit
class ViewController: UITableViewController {
var lblString : String = "initialString"
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 2
}
override func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 30
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
if(indexPath.section == 0)
{
if(indexPath.row == 0)
{
let cell = tableView.dequeueReusableCellWithIdentifier("cell1") as! cell1
cell.label1.text = lblString;
return cell
}
}
else
{
if(indexPath.row == 0)
{
let cell = tableView.dequeueReusableCellWithIdentifier("cell2") as! cell2
return cell
}
}
return UITableViewCell()
}
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
if(indexPath.section == 0)
{
return 40
}
else
{
return 120
}
}
}
MyDatePicker执行后和reloadData
,我可以看到cellForRowAtIndexPath
功能通过断点运行。但cell1的标签仍然是“initialString”。我该如何解决这个问题?
'让故事板= UIStoryboard(名称: “主” ,bundle:nil) let view = storyBoard.instantiateViewControllerWithIdentifier(“ViewController”)as! ViewController'这给你一个单独的控制器实例。这不是同一个控制器。你可以做的是使用一个块将更改传递给主控制器 –