2017-02-19 8 views
0

Моих TableView ячейка субтитров не отображаются, когда я использую это:субтитров Tableview клеток

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

var cell:UITableViewCell? 

if tableView.tag == 1 { 

    guard let latestCell = tableView.dequeueReusableCell(withIdentifier: "latestCell") else { 
     return UITableViewCell(style: .subtitle, reuseIdentifier: "latestCell") 
    } 



    latestCell.textLabel?.text = latest[indexPath.row] 

    latestCell.detailTextLabel?.text = latestSub[indexPath.row] 

    latestCell.accessoryType = .disclosureIndicator 

    return latestCell 


} 

} Но если я использую это:

else if tableView.tag == 2 { 

    let olderCell = UITableViewCell(style: UITableViewCellStyle.subtitle, reuseIdentifier: "olderCell") 



    olderCell.textLabel?.text = older[indexPath.row] 

    olderCell.detailTextLabel?.text = olderSub[indexPath.row] 

    olderCell.accessoryType = .disclosureIndicator 

    return olderCell 
} 

else { 
    return cell! 
} 

} субтитров нагрузка прекрасно, но после того, как я закрою приложение и перезагрузите представление, приложение автоматически заработает, не предоставив журнал сбоев или отведя меня на вкладку отладки.

Я знаю, что массивы, из которых поступают данные, прекрасны, и я думаю, что я настроил все прямо в раскадровке. Многие аналогичные вопросы уже были опубликованы по этому вопросу, но все они, похоже, дошли до того, чтобы забыть установить cellStyle в .subtitle. Заранее спасибо за любую помощь, которую я получаю!

BTW. Мои обычные названия ячеек работают так, как я их хочу. Нет проблем.

EDIT:

Я думаю, что проблема в том, что я могу создать ячейки по умолчанию в стиле без проблем. Но затем, когда я пытаюсь установить стиль в .subtitle, он загружается правильно в первый раз, но когда он открывается во второй раз, он падает. Есть ли способ использовать эти обе декларации вместе таким образом, чтобы они не устраняли друг друга ;?

guard let latestCell = tableView.dequeueReusableCell(withIdentifier: "latestCell") else { 
    return UITableViewCell(style: .subtitle, reuseIdentifier: "latestCell") 
} 

и:

let latestCell = UITableViewCell(style: UITableViewCellStyle.subtitle, reuseIdentifier: "latestCell") 

A link to a view of how my cells are set up in the storyboard:

+0

В вы храните пусть вещи, вы вернетесь в клетку даже не устанавливая его свойства. Второй код не использует ячейку повторно (не рекомендуется). – Larme

+0

Друг я могу спросить вас? Вы используете два вида таблицы? –

+0

Да, я использую два. – Tuomax

ответ

0

Делают это так:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    var cell:UITableViewCell = self.tableView.dequeueReusableCellWithIdentifier("latestCell") as UITableViewCell 

    cell.textLabel?.text = latest[indexPath.row] 
    cell.detailTextLabel?.text = latestSub[indexPath.row] 
    cell.accessoryType = .disclosureIndicator 

    return cell 

} 

Отметить как раствор/upvote, если это решить вашу проблему.

+0

Я боюсь, что это не устанавливает cellStyle для субтитров, поэтому это не имеет значения. – Tuomax

0

Простейшее решение:

Design оба клетки в Interface Builder непосредственно в окне просмотра (ов) таблицы, установить стиль и вид аксессуаров для получения требуемых значений и добавить идентификаторы.

Затем код можно свести к.

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    switch tableView.tag { 
    case 1: 
    let latestCell = tableView.dequeueReusableCell(withIdentifier: "latestCell" for: indexPath) 
     latestCell.textLabel!.text = latest[indexPath.row] 
     latestCell.detailTextLabel!.text = latestSub[indexPath.row] 
     return latestCell 

    case 2: 
     let olderCell = tableView.dequeueReusableCell(withIdentifier: "olderCell" for: indexPath) 
     olderCell.textLabel!.text = older[indexPath.row] 
     olderCell.detailTextLabel!.text = olderSub[indexPath.row] 
     return olderCell 

    default: 
     fatalError("That should never happen") 
    } 

} 

Поскольку клетки предопределены стилю субтитров, как textLabel и detailTextLabel гарантированно существует и может быть безопасно развернуты.

Однако какова существенная разница между ячейками. Из данного кода вы можете фактически использовать одну ячейку (идентификатор cell). Это может сделать код еще короче:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

    let cell = tableView.dequeueReusableCell(withIdentifier: "cell" for: indexPath) 

    if tableView.tag == 1 { 
     cell.textLabel!.text = latest[indexPath.row] 
     cell.detailTextLabel!.text = latestSub[indexPath.row] 
    } else { 
     cell.textLabel!.text = older[indexPath.row] 
     cell.detailTextLabel!.text = olderSub[indexPath.row] 
    } 
    return cell 
} 
+0

Это не устанавливает стиль для субтитров, поэтому вам не повезло, и я уже правильно установил свои ячейки в раскадровке. Но спасибо за попытку! – Tuomax

+0

Если стиль установлен в Interface Builder, он должен появиться в повторно используемой ячейке. – vadian

+0

Что вы подразумеваете под этим? Мне жаль, что я не совсем понимаю. Если вы имеете в виду стиль, установленный в ячейке в раскадровке, то да, он появляется там. – Tuomax

0
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") //replace "Cell" with your identifier 
    cell.textLabel = yourTitleArray[indexPath.row] 
    cell.detailTextLabel = yourSubtitleArray[indexPath.row] 
    return cell! 
} 
+0

Извините, не работает, приложение вылетает. – Tuomax

+0

Какая ошибка у вас? –

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