2016-04-24 4 views
1

У меня есть табличный вид с пользовательской ячейкой в ​​нем, пользовательская ячейка имеет две метки и одно текстовое поле. Когда пользователь редактирует текстовое поле, метка2 изменяется в текущей ячейке. Но я хочу, чтобы значение (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. создать протокол с помощью метода, называемого, например, userEnteredNumber
  2. пусть ваш контроллер представления соответствует этому протоколу
  3. создать поле в TableViewCell под названием delegate - его тип должен предварительно созданный протокол
  4. при настройке ячейки в cellForRowAtIndexPath назначить self к delegate свойству клетки
  5. как только пользователь вводит значение вызова метода делегата от ранее установленного делегата

Во-вторых, вы должны как-то вспомнить S вашего приложения. Дело в табличных представлениях заключается в том, что iOS может решить перезагрузить содержимое таблицыView в любой точке (теоретически), и ваш контроллер должен отслеживать точный контент, который должна иметь каждая ячейка.

Я не знаю, какие именно требования для вашего приложения, но вы, вероятно, должны назначить значение, которое передается через метод протокола какой-либо переменной в вашем viewController. Затем вы вызываете tableView reloadData и, наконец, вам нужно изменить метод cellForRowAtIndexPath, чтобы установить желаемые свойства некоторых ячеек на основе сохраненного значения.

Смежные вопросы