2017-02-22 5 views
0

Я создал UITableView, и это мой код для него:пользовательских UITableViewCell с нулевым UIImageView

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{ 
    // let cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "SubjectCell") 

    let cell = SubjectCell(style: UITableViewCellStyle.default, reuseIdentifier: "SubjectCell") 

    cell.cellUIImage.image = UIImage(named: "menu.png") 

    // cell.cellUIImage = UIImageView(UIImage(named: "menu-32.png")) 

    if indexPath.row % 2 == 0{ 
     cell.backgroundColor = UIColor.cyan 
    } 

    return cell 
} 

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return 5 
} 

И мой SubjectCell класс следующее:

import Foundation 
import UIKit 

class SubjectCell : UITableViewCell{ 
    @IBOutlet var cellUIImage: UIImageView! 
} 

Однако, когда я запускаю этот код, он падает. Отладка, я заметил, что cellUIImage равен нулю, поэтому он падает, когда он его распаковывает. IBOulet связан с моей ячейкой прототипа.

linked UIImageView

разворачивание вещь сделана Xcode, и он не должен быть нулевым, потому что это на самом деле клетка UIImageView.

+0

Почему вы не выбрали ячейку из таблицы? – rmaddy

+0

@rmaddy нет причины в частности. Это действительно примитивный код, я обычно адаптирую его впоследствии ... однако, я упал, это не причина, почему он рушится. –

+2

Именно по этой причине он терпит неудачу. Ваш код не создает ячейку из xib/раскадровки. Вы создаете свою ячейку только из кода. Поэтому ни один из выходов ячейки не настроен. Правильно создайте свою ячейку. Правильно зарегистрируйте класс/nib ячейки, и он будет работать, как ожидалось. – rmaddy

ответ

-2

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

В своем раскадровке выберите ячейку Prototype на вкладке Inspectitor Inspector, чтобы создать пользовательскую ячейку identifier (например: «YourCellIdentifier»).

Далее (еще в раскадровке) выберите UIImageView, который был добавлен к пользовательской ячейке, дать ему номер тега (например: 1000)

Теперь добавьте этот код в cellForRowAt метод:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *cellIdentifier = @"YourCellIdentifier"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 
    // Here is your desired image view. 
    UIImageView *yourImageView = [cell viewWithTag:1000]; 

    return cell; 
} 
Смежные вопросы