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.

  1. Добавьте и расположите статические ячейки:

  2. Дайте каждой ячейке уникальное имя и добавьте их в качестве TableViewCell учебный класс

  3. Настройте код:

    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
  }
}

Другие вопросы по тегам