2017-02-10 6 views
2

Я хочу добавить UICollectionView внутри ячейки таблицы. Для этой цели я создал ниже файлы.Не удалось создать ячейку в коллекции?

CollectionCell:

class CollectionCell: UICollectionViewCell { 

    @IBOutlet weak var lblName: UILabel! 
    @IBOutlet weak var imgCell: UIImageView! 
    override func awakeFromNib() { 
     super.awakeFromNib() 
     // Initialization code 
    } 

} 

Я также создал CollectionCell.xib

CollectionView.swift

class CollectionView: UIView { 

    @IBOutlet weak var collectionview: UICollectionView! 
    var arrItems:[String] = [] 
    /* 
    // Only override draw() if you perform custom drawing. 
    // An empty implementation adversely affects performance during animation. 
    override func draw(_ rect: CGRect) { 
     // Drawing code 
    } 
    */ 
    func configureCollectionView() 
    { 
     collectionview.register(CollectionCell.self, forCellWithReuseIdentifier: "CollectionCell") 
     collectionview.delegate = self 
     collectionview.dataSource = self 
    } 
    func setCollectionViewDatasource(arrItems:[String]) 
    { 
    self.arrItems = arrItems 
    self.collectionview.reloadData() 
    } 
    static func initiateView()->CollectionView 
    { 
    let nib = UINib(nibName: "CollectionView", bundle: nil) 
    let view = nib.instantiate(withOwner: nil, options: nil)[0] as! CollectionView 
    return view 
    } 

} 

extension CollectionView:UICollectionViewDelegate 
{ 

} 
extension CollectionView:UICollectionViewDataSource 
{ 
    func numberOfSections(in collectionView: UICollectionView) -> Int { 

    return 1 

    } 

    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 

    return arrItems.count 
    } 

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 

    let cell:CollectionCell = collectionView.dequeueReusableCell(withReuseIdentifier: "CollectionCell", for: indexPath) as! CollectionCell 
    cell.lblName.text = arrItems[indexPath.row] 
    return cell 
    } 

} 

Я также создал Коллекция View.xib

Теперь, как я хочу, чтобы добавить CollectionView внутри Tableview ячейки для этой цели я создал класс Cutom TableView клеток, CustomTableCell

class CustomTableCell: UITableViewCell { 

    var view = CollectionView() 
    override func awakeFromNib() { 
     super.awakeFromNib() 
     // Initialization code 
    } 
    override init(style: UITableViewCellStyle, reuseIdentifier: String?) { 
    super.init(style: style, reuseIdentifier: reuseIdentifier) 
    print("ceonstatructir init") 
    // insitate a nib 
    view = CollectionView.initiateView() 
    view.configureCollectionView() 
    contentView.addSubview(view) 
    view.setCollectionViewDatasource(arrItems: ["firest","second","thierd"]) 

    } 

    required init?(coder aDecoder: NSCoder) { 
    fatalError("init(coder:) has not been implemented") 
    } 
    override func setSelected(_ selected: Bool, animated: Bool) { 
     super.setSelected(selected, animated: animated) 

     // Configure the view for the selected state 
    } 
    func setDataSource(arrItems:[String]) 
    { 
    //view.setCollectionViewDatasource(arrItems: arrItems) 

    } 

} 

Теперь я создал mainViewController, чтобы показать данные о Tableview так я crteated viewcontroller.swift

class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource { 

    @IBOutlet weak var tableview: UITableView! 
    let sectionArray = ["First","Second","Third","Fourth","Fifth"] 
    let collectionArray = [["First","Second","Third"],["First","Second","Third"],["First","Second","Third"],["First","Second","Third"],["First","Second","Third"]] 
    override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
    tableview.register(CustomTableCell.self, forCellReuseIdentifier: "TableCell") 
    } 

    override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
    } 
    func numberOfSections(in tableView: UITableView) -> Int { 

    return sectionArray.count 
    } 
    func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { 

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

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

    let cell:CustomTableCell = tableView.dequeueReusableCell(withIdentifier: "TableCell", for: indexPath) as! CustomTableCell 
    return cell 
    } 
    func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) { 

    let cell:CustomTableCell = cell as! CustomTableCell 
    let dataSource = collectionArray[indexPath.section] 
    cell.setDataSource(arrItems:dataSource) 


    } 
} 

Теперь я пытаюсь отправить источник данных к моему Coll ectionview, когда tableviewcell только что создан. Но я получаю сбой в cellForItemAtIndexPath в коллекции. Я получаю ячейку как ноль в cellForItemAyIndexPath. Пожалуйста, скажите мне, в чем проблема с ней.

+0

Вы вышлите мне демы? Я решит и вернусь к вам –

+0

как я пришлю вам – iOSGuy

+0

Я ОТПРАВИЛ ПОЖАЛУЙСТА, ПРОВЕРЬТЕ – iOSGuy

ответ

2

В Collectionview.swift изменить эту функцию

func configureCollectionView() 
    { 
    let nib = UINib(nibName: "CollectionCell", bundle: nil) 
    collectionview.register(nib, forCellWithReuseIdentifier: "cell") 

    collectionview.delegate = self 
    collectionview.dataSource = self 
    } 

В изменении cellforItemat этой строку

let cell:CollectionCell = collectionView.dequeueReusableCell(withReuseIdentifier: "CollectionCell", for: indexPath) as! CollectionCell 

к

let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! CollectionCell 
+0

Спасибо за помощь, но я не вижу, чтобы какая-либо ячейка коллекции была создана – iOSGuy

+0

@iOSGuy Просто напишите self.backgroundColor = UIColor.red в коллекцию, вы увидите 3 ячейки на секцию, созданные разных размеров –

+0

вам нужно указать идентификатор ячейки по ячейке коллекции для идентификатора – iOSGuy

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

  • Нет связанных вопросов^_^