ios swift: как иметь одну статическую ячейку в динамическом табличном представлении?
Я хотел бы использовать tableView
иметь 2 статические ячейки поверх списка динамических ячеек. Насколько я понимаю, я должен использовать динамический прототип tableView. Но я не понимаю, как добавить 2 статические ячейки и спроектировать их, например. добавив текстовое поле к первому и метку ко второму.
Что мне делать в моей раскадровке? А что мне делать внутри контроллера? Как я могу отличить статические от динамических ячеек?
Может ли кто-нибудь дать мне как кровавому новичку руководство, с чего начать? Спасибо!!
РЕДАКТИРОВАТЬ: Я попробовал это для тестирования:
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 5
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("cardCell", forIndexPath: indexPath) as CardTableViewCell
//static cell
if (indexPath.row < 2) {
cell.dyn.text = "static \(indexPath.row)"
return cell;
}
// Configure the cell...
cell.dyn.text = "buh"
return cell
}
это приводит к этому:
Позже, когда я использую реальные данные, я пропущу первые 2 строки данных... Могу ли я как-то "сбросить" счетчик строк после того, как я создал свои статические ячейки?
И как я могу изменить 2 статические ячейки? Для добавления текстового поля и меток? Или я должен сделать это программно?
3 ответа
Я нашел помощь здесь: Смешивание статических и динамических секций в сгруппированном табличном представлении
И мое решение выглядит так:
1.
Добавьте и расположите статические ячейки:
Дайте каждой ячейке уникальное имя и добавьте их в качестве
TableViewCell
учебный классНастройте код:
override func numberOfSectionsInTableView(tableView: UITableView) -> Int { return 3 } override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { if (section == 2){ // my dynamic cell is index 2 return 5 // just for testing, add here yourrealdata.count } return 1 // for static content return 1 } override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { var cell: CardTableViewCell! if (indexPath.section == 0) { cell = tableView.dequeueReusableCellWithIdentifier("static1", forIndexPath: indexPath) as CardTableViewCell cell.cardSetName?.text = self.cardSetObject["name"] as String }else if (indexPath.section == 1) { cell = tableView.dequeueReusableCellWithIdentifier("static2", forIndexPath: indexPath) as CardTableViewCell // just return the cell without any changes to show whats designed in storyboard }else if (indexPath.section == 2) { cell = tableView.dequeueReusableCellWithIdentifier("cardCell", forIndexPath: indexPath) as CardTableViewCell cell.dyn.text = "row \(indexPath.row)" // return test rows as set in numberOfRowsInSection } return cell; }
Конечные результаты будут выглядеть так:
Я надеюсь, что могу помочь кому-то с тем же вопросом:)
Вы можете использовать что-то вроде этого, чтобы использовать или отобразить вашу статическую ячейку
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return numberOfDynamicCells + 1;
}
и в вас cellForRowAtIndexPath
источник данных вы можете использовать что-то вроде этого.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
if(indexPath.row == 0){
// go ahead to display your static Cell
}
else{
//go ahead to display your dynamic cells.
}
return yourCell;
}
вот код для быстрого
func numberOfRowsInSection(_ section: Int) -> Int{
return numberOfDynamicCells + 1
}
и в вас cellForRowAtIndexPath
источник данных вы можете использовать что-то вроде этого.
func cellForRowAtIndexPath(_ indexPath: NSIndexPath) -> UITableViewCell?{
if indexPath.row = 0{
// go ahead to display your static Cell
}
else{
//go ahead to display your dynamic cells.
}
return yourCell;
}
Удачи...
Да, вы можете иметь статические ячейки быть свойствами IBOutlet и в tableView(_:cellForRowAt:)
Вы можете вернуть эти свойства для любых путей индекса, которые вы хотите
Вот пример:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
switch indexPath.row {
case 0:
return firstStaticCell
case 1:
return secondStaticCell
default:
let cell = tableView.dequeueReusableCell(withIdentifier: "DynamicCell", for: indexPath)
cell.textLabel?.text = "Dynamic \(indexPath.row + 1)"
return cell
}
}