2016-04-24 58 views
1

我有一個帶有自定義單元格構建的表格視圖,自定義單元格有兩個標籤和一個文本框。當用戶編輯文本字段時,label2在當前單元格中發生變化。但我希望第二個單元格中的值(Label2)也將根據當前單元格中的值進行更改。例如:第一個單元格中的值是x,第二個單元格中的值應該是2 + x。我應該如何認識到這一點?在我的視圖控制器我使用下面的代碼:根據另一個單元格中的值更改自定義單元格中的值

var myString = [String]() 

@IBOutlet weak var TableView: UITableView! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    myString = ["a", "b"] 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
} 

func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
    return 1 
} 

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

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! CalculationsTableViewCell 

    tableView.tableFooterView = UIView(frame: CGRectZero) //hide empty cells in UITableView 

    cell.Label?.text = myString[indexPath.row] 

    return cell 

} 

我TableViewCell:

@IBOutlet weak var Label: UILabel! 

@IBOutlet weak var Label2: UILabel! 

@IBOutlet weak var TextField: UITextField! 

@IBAction func TextFieldEditingChanged(sender: AnyObject) { 

    var value: Double 

    value = NSString(string: TextField.text!).doubleValue 

    Label2.text = "\(value)" 
} 

override func awakeFromNib() { 
    super.awakeFromNib() 
} 

override func setSelected(selected: Bool, animated: Bool) { 
    super.setSelected(selected, animated: animated) 
} 

回答

1

首先,你應該/可以利用委託模式從細胞回傳達給你的控制器:

  1. 使用名爲eg的方法創建協議userEnteredNumber
  2. 讓您的視圖控制器符合該協議
  3. TableViewCell稱爲delegate創建一個字段 - 它的類型應該先前創建的協議
  4. 設立時cellForRowAtIndexPath細胞分配self到小區的delegate財產
  5. 只要用戶輸入一個值調用委託方法在預先設定的委託

其次,你必須以某種方式記住的S你的應用程序的tate。與tableviews的事情是,iOS可以決定在任何時候重新加載tableView的內容(理論上),你的控制器必須跟蹤每個單元應具有的確切內容。

我不知道你的應用程序的具體要求是什麼,但你應該將通過協議方法傳輸的值分配給viewController中的某個變量。然後觸發一個tableView reloadData,最後你必須改變cellForRowAtIndexPath方法,根據存儲的值設置一些單元的所需屬性。

相關問題