2016-11-18 2 views
0

У меня есть UITableView с UICollectionView внутри каждого из его строк, как на рисунке ниже.Как получить раздел UITableView изнутри дочернего UICollectionview

collectionviews within tableviews

Источник: https://ashfurrow.com/blog/putting-a-uicollectionview-in-a-uitableviewcell-in-swift/

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

my app

Проблема, которую я имею, что английский набор символов отображается для каждого Tableview строки.

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

Что мне нужно сделать, это получить значения секции ячеек табличного представления о том, что collectionviews находятся внутри и каким-то образом передают, что

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

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

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

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

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

    return cell 
} 

... 

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

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "InnerCollectionViewCell", 
                for: indexPath as IndexPath) 

    //format inner collectionview cells 

    //indexPath.section is the collectionview section index but needs to be its parent tableview section's index. How do I get it? 
    cellCharLabel?.text = Languages.sharedInstance.alphabets[indexPath.section].set[indexPath.row].char 
    cellCharLabel?.textAlignment = .center 
    cellCharLabel?.font = UIFont(name: "Helvetica", size: 40) 

    cell.contentView.addSubview(cellCharLabel!) 

    return cell 
} 

ответ

2

Вы можете установить collectionView тег, чтобы сделать это. CollectionView должно быть подзаголовком tableViewCell. То есть collectionView может быть собственностью вашего сайта TableViewCell Кажется, вы используете Prototype Cell.

class YourCustomizeTableViewCell: UITableViewCell { 
    let collectionView: CollectionView 
    ... 
} 



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

    let cell = tableView.dequeueReusableCell(withIdentifier: "HorizontalSlideCell", for: indexPath) as! YourCustomizeTableViewCell 
    cell.collectionView.tag = indexPath.row 

    return cell 
} 

... 

func collectionView(_ collectionView: UICollectionView, 
        cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "InnerCollectionViewCell", 
               for: indexPath as IndexPath) 


//indexPath.section is the collectionview section index but needs to be its parent tableview section's index. How do I get it? 
cellCharLabel?.text = Languages.sharedInstance.alphabets[collectionView.tag].set[indexPath.row].char 
... 
return cell 
} 
+0

Приветствия. Только то, что я искал! – Danoram

+0

, если мы передаем тег в виде коллекции, но из-за многократно используемой ячейки таблицы я получаю предыдущую ячейку и предыдущий тег. – user1960279

+0

@ user1960279 Вы видите после '' 'cell.collectionView.tag = indexPath.row''' тег коллекцииView был переназначен. Где вы использовали тег? –

2

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

Вам нужно будет сделать var в классе tableViewCell для хранения индекса раздела.

class CustomTableViewCell: UITableViewCell { 
     var sectionIndex:Int? 

} 

Тогда при вызове cellForRow ... вы просто передаете раздел этой ячейке.

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

    let cell = tableView.dequeueReusableCell(withIdentifier: "HorizontalSlideCell", for: indexPath) as CustomTableViewCell 
    cell.sectionIndex = indexPath.section 
    return cell 
} 

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

Позвольте мне знать, если вам нужно более подробно

+0

Это было полезно. Благодаря! – Danoram

+1

Извините, я до сих пор не получил доступ к разделуIndex из CollectionViewCell, не могли бы вы привести пример? спасибо (ОЧЕНЬ СРОЧНО) – Gulz

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