2014-12-01 2 views
0

Основная роль - отображать имена плейлистов в виде таблицы, но он показывает мне слово «имя» примерно в 500 ячейках!неправильный код для UITableview SWIFT

я могу сделать простые ошибки, потому что я только обучение быстрым, и это мой первый язык программирования

Существует код:

import UIKit 
import MediaPlayer 

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 

@IBOutlet var tableView: UITableView! 

var tableData = MPMediaQuery.playlistsQuery() 
var songname: NSString = MPMediaPlaylistPropertyName 

override func viewDidLoad() { 
    super.viewDidLoad() 


    self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell") 

    self.tableView.reloadData() 

} 

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return self.tableData.items.count 
} 

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

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

    cell.textLabel.text = songname 

    return cell 
} 

func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) { 
    println("Row \(indexPath.row) selected") 
} 
} 
+0

Вы не ставим различные тексты для ячейки в зависимости от пути указателя. – Abizern

ответ

0

Ваша проблема в том, что вы показываете MPMediaPlaylistPropertyName в клетке, которая, скорее всего, просто постоянная строка «имя»

Что вам нужно сделать, это установить TextLabel ячейки с действительным именем списка воспроизведения, который будет выглядеть примерно так в вашем методе cellForRowAtIndexPath

Заменить

cell.textLabel.text = songname 

с

let playlist: MPMediaPlaylist = tableData.collections[indexPath.row] as MPMediaPlaylist 
let playlistName = playlist.valueForProperty(MPMediaPlaylistPropertyName) as NSString 
cell.textLabel.text = playlistName; 

Кроме того, вы должны убедиться, что вы получаете счет от коллекций tableData так ваш номер изменения rowsInSectionMethod:

return self.tableData.items.count 

в

return self.tableData.collections.count 

Для немного больше понимание, что мы делаем в cellForRowAtIndexPath теперь:

  1. Получение определенного элемента MPMediaPlaylist для этого конкретная строка
  2. Получение имя плейлиста и присваиваем его переменной
  3. Присвоение этого имени к клеткам TextLabel

Позвольте мне знать, если у вас есть какие-либо другие вопросы

+0

Это почти сейчас! Всего 22 ячейки, как и должно быть, но они emty (без имен) –

+0

У вас есть самый обновленный код, который я разместил? Я редактировал несколько раз –

+0

Упс! Извините, я просто забыл добавить cell.textlable! теперь это работа, спасибо, много! –

-2

Вы должны очистки данных клеток, так как вы повторное использование клеток, Сразу после линии

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

сделать

cell.textLabel.text = "" 
+0

Место для сброса данных ячейки находится в методе '+ prepareForReuse'. – Abizern

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