2015-04-10 7 views
1

Если я не хочу использовать ячейку прототипа в моем представлении таблицы. В cellForRowAtIndexPath, мне все еще нужно предоставить идентификатор ячейки в коде, чтобы удалить ячейку?Как создать табличное представление без ячейки прототипа

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

fatal error: unexpectedly found nil while unwrapping an Optional value

Это происходит на этой линии:

let cell = tableView.dequeueReusableCellWithIdentifier("cell") as UITableViewCell 

Я не уверен, что другие линии для использования для деактивации ячейки.

ответ

3

Да, у вас есть, или у swift нет способа узнать, какой объект вы хотите сделать dequeue, поэтому у вас есть nil объект.

Вы должны использовать - dequeueReusableCellWithIdentifier:forIndexPath:

вместо - dequeueReusableCellWithIdentifier

Это потому, что первый один на самом деле возвращает AnyObject в то время как dequeue без indexpath возвращает AnyObject?

Для того, чтобы сделать ваш код работает, либо изменить ваш код до ...forIndexPath

или сделать это:

var cell: UITableViewCell? 
if let cell = cell { 
    //dequeue here 
} else { 
    cell = UITableViewCell(style: UITableViewCellStyle, 
reuseIdentifier reuseIdentifier: String?) ... 
} 
//config cell 
return cell 

В случае, если вы вид делать человек-все-все-в-кода, вам необходимо зарегистрировать свой UITableViewCell класс tableView как предполагает Mert.

tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier identifier: "Cell")


Пример кода:

// I remove all other things, just focus on what you need 
override func viewDidLoad() { 
     super.viewDidLoad() 
     table.delegate = self 
     table.dataSource = self 
     table.registerClass(UITableViewCell.self, forCellReuseIdentifier identifier: "Cell") 
    } 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     var cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! UITableViewCell 
     configureCell(cell, atIndexPath: indexPath) 
     return cell 
    } 
+0

Вы не можете использовать String ?. Вам нужно указать допустимую строку или она не будет компилироваться. Можете ли вы опубликовать код dequeue (у вас есть только комментарий)? – 4thSpace

+0

Я скопировал его из документации, он пишет 'reuseIdentifer' как' String? '. Это странно. Ну, проверьте мой пример кода, он должен работать.Это для swift 1.2, если вы используете swift 1.1, измените 'as!' На 'as' –

+0

Множество ошибок:« Использование неразрешенного идентификатора »для CellReuseIdentifier« »для registerClass. Также «Использование неразрешенного идентификатора« configureCell ». Наверное, лучше всего, если вы сначала попробуете код. Это похоже на слизистую грязь у стены прямо сейчас. – 4thSpace

0

вы должны сделать свой регистр просмотра таблицы для этой ячейки класса

tableView.registerClass(_ cellClass: AnyClass, forCellReuseIdentifier identifier: String) 

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

Но ваша основная проблема здесь должна быть следующей: dequeueReusableCellWithIdentifier возвращает optional. если вы хотите вернуть его как ячейку, это, вероятно, даст ошибку. вы должны убедиться, что вы возвращаете ячейку non-optional в функции cellForRowAtIndexPath.

+0

При попытке кода регистра класса, я получаю сообщение об ошибке, что "" как ожидается. – 4thSpace

+0

Кроме того, основная проблема заключается не в том, что вы заявили, а вместо этого, где вы получаете строку идентификатора (так как этого нет в IB). – 4thSpace

+0

"," ожидается, что это не настоящая ошибка, вы только что написали что-то не так, это не о функциях, которые вы используете. –

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