2016-07-24 4 views
0

Пользовательский класс ячейки имеет переопределяющий func layoutSubviews(), где detailTextLabel каждой ячейки присваивается заголовок «Jim». Нажав на DidSelectRowAtIndexPath, есть способ постоянно менять текст детали ячейки (чтобы остановить ячейку от постоянного создания детали Джима), чтобы сказать «Боб» ?.Как изменить пользовательскую ячейку внутри DidSelectRowAtIndexPath

//This function is in the custom cell UserCell 
 

 
class CustomCell: UITableViewCell { 
 
override func layoutSubviews() { 
 
     super.layoutSubviews() 
 
     
 

 
     
 
      detailTextLabel?.text = "Jim" 
 
    } 
 

 
///........ 
 
} 
 

 

 
//In the viewController with the tableView outlet 
 
class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { 
 

 
//..... 
 

 

 
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
 
     let cell = tableView.dequeueReusableCellWithIdentifier(cellId, forIndexPath: indexPath) as! CustomCell 
 
     
 
     //...... 
 
     
 
     
 
     return cell 
 
    } 
 

 

 
    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
 

 
/* Code I need to convert the detailTextLabel.text to equal "Bob" upon clicking on certain cell */ 
 

 
}

ответ

0

Очень просто, сделать это следующим образом:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 

detailTextLabel?.text = "Bob" 

} 
+0

Спасибо за ответ, хотя я уже пробовал это. Он остался как Джим, поскольку переопределяющий func layoutSubviews вызывается, когда tableView перезагружается и поэтому возвращает его в Jim даже после того, как я объявляю его как Боба в моем didSelectRow. ... – slimboy

0

Клетка сама не должна использоваться для хранения состояния для каких-либо данных, но только для его отображения. Создайте свойство изменчивого массива на контроллере, чтобы удерживать подстилающие данные (строки). Задайте свойства текста новых ячеек, прочитав этот массив, и в tableView:didSelectRowAtIndexPath: измените значение в массиве в индексе для "Bob" на "Jim". Всякий раз, когда tableView перезагружается, он теперь считывает обновленное значение из dataSource.

В дополнение к протоколу UITableViewDelegate также изучите протокол UITableViewDataSource. По умолчанию класс UITableViewController соответствует обеим этим протоколам и присваивается каждому свойству .tableView (если вы оцениваете его значения self.tableView.delegate и self.tableView.datasource, вы получите обратно исходный UITableViewController). Если вы вручную создали свой собственный класс контроллера Tableview, который наследуется от UIViewController, тогда вам нужно будет назначить оба этих свойства в таблицеView, чтобы он функционировал должным образом.