我有一個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'這給你一個單獨的控制器實例。這不是同一個控制器。你可以做的是使用一個塊將更改傳遞給主控制器 –