创建通用函数从表和集合视图中获取indexpath-iOS-Swift



我有一个tableView和collectionView,为了获得indexPath,我在tableViewCell和collectionViewCell上使用以下方法(我不想使用indexPathForSelectedRow/Item方法(。有没有一种方法可以让它变得通用?

想法请

// For Tableview 
func getIndexPath() -> IndexPath? {
guard let superView = self.superview as? UITableView else {
return nil
}
let indexPath = superView.indexPath(for: self)
return indexPath
}
// For CollectionView
func getIndexPath() -> IndexPath? {
guard let superView = self.superview as? UICollectionView else {
return nil
}
let indexPath = superView.indexPath(for: self)
return indexPath
}

您可以使用两个协议来实现这一点,一个是UITableViewUICollectionView都符合,另一个则是UITableViewCellUICollectionViewCell都符合。

protocol IndexPathQueryable: UIView {
associatedtype CellType
func indexPath(for cell: CellType) -> IndexPath?
}
protocol IndexPathGettable: UIView {
associatedtype ParentViewType: IndexPathQueryable
}
extension UITableView : IndexPathQueryable { }
extension UICollectionView : IndexPathQueryable { }
extension UICollectionViewCell : IndexPathGettable {
typealias ParentViewType = UICollectionView
}
extension UITableViewCell : IndexPathGettable {
typealias ParentViewType = UITableView
}
extension IndexPathGettable where ParentViewType.CellType == Self {
func getIndexPath() -> IndexPath? {
guard let superView = self.superview as? ParentViewType else {
return nil
}
let indexPath = superView.indexPath(for: self)
return indexPath
}
}

实际上,不应该需要表视图单元格上的getIndexPath方法。单元格不应该知道它们的索引路径。我建议你重新考虑你的设计。

相关内容

  • 没有找到相关文章

最新更新