UITableViewCell类

时间:2016-09-07 12:01:35

标签: ios swift uitableview uicollectionview uistoryboardsegue

我有TableViewTableViewCell我已添加UICollectionView。现在,当用户点击任何UICollectionView时,我想将数据传递给下一个viewController,但遗憾的是我无法在UITableViewCell类中使用perform segue,我已经选择了项目。有没有办法在这里执行segue?

整码

class UserLibraryViewController: UIViewController {

extension UserLibraryViewController : UITableViewDelegate { }

extension UserLibraryViewController : UITableViewDataSource {

func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
    return myBooksGenre[section]
}

func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return myBooksGenre.count
}

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

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("userBooksTableViewCell") as! UserLibraryTableViewCell
    cell.tableIndexPath = indexPath

    return cell
}
}

TableViewCell

class UserLibraryTableViewCell: UITableViewCell {
@IBOutlet weak var collectionView: UICollectionView!
var tableIndexPath: NSIndexPath?

}

extension UserLibraryTableViewCell : UICollectionViewDataSource {

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

    return 12
}

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier("userBooksCollectionViewCell", forIndexPath: indexPath) as! UserLibraryCollectionViewCell



    return cell
}

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {

    print("\(self.tableIndexPath!.section) ---- \(indexPath.item) \(tableSectionHeader[self.tableIndexPath!.section]) ")


}
}

extension UserLibraryTableViewCell : UICollectionViewDelegateFlowLayout {

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
    let itemsPerRow:CGFloat = 4
    let hardCodedPadding:CGFloat = 5
    let itemWidth = (collectionView.bounds.width / itemsPerRow) - hardCodedPadding
    let itemHeight = collectionView.bounds.height - (2 * hardCodedPadding)
    return CGSize(width: itemWidth, height: itemHeight)
}

}

1 个答案:

答案 0 :(得分:2)

创建一个协议,之后在TableViewCell中创建其实例并在UserLibraryViewController中实现协议,然后在didSelectItemAtIndexPath CollectionView中使用该委托实例像这样调用这个方法。

protocol CustomCollectionDelegate {
    func selectedCollectionCell(indexPath: NSIndexPath)
}

class UserLibraryTableViewCell: UITableViewCell {
    @IBOutlet weak var collectionView: UICollectionView!
    var tableIndexPath: NSIndexPath?
    var delegate: CustomCollectionDelegate?
}   

现在在didSelectItemAtIndexPath的{​​{1}}内调用此方法。

CollectionView

现在在func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) { print("\(self.tableIndexPath!.section) ---- \(indexPath.item) \(tableSectionHeader[self.tableIndexPath!.section]) ") self.delegate?.selectedCollectionCell(indexPath) } 中实现此协议,并在UserLibraryViewController中设置委托。

cellForRowAtIndexPath

注意:我添加了func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier("userBooksTableViewCell") as! UserLibraryTableViewCell cell.tableIndexPath = indexPath cell.delegate = self return cell } extension UserLibraryViewController : CustomCollectionDelegate { func selectedCollectionCell(indexPath: NSIndexPath) { self.performSegueWithIdentifier("Identifier", sender: indexPath) } } 作为参数的协议方法,您可以使用自定义对象或NSIndexPath更改它。