gpt4 book ai didi

ios - indexPathForCell : returning nil

转载 作者:行者123 更新时间:2023-11-29 00:35:31 26 4
gpt4 key购买 nike

我有一个 TableView 和此方法来查找其中一个单元格的 subview 的 indexPath...

- (NSIndexPath *)indexPathContainingView:(UIView *)view {
while (view && ![view isKindOfClass:[UITableViewCell self]]) {
view = view.superview;
}
UITableViewCell *cell = (UITableViewCell *)view;
return (cell)? [self.tableView indexPathForCell:cell] : nil;
}

我调用了最顶层单元格的 subview (这是可见的, TableView 被滚动),并且在return行上有一个断点,我在 lldb 中得到了这个令人费解的结果......

enter image description here

cell 看起来不错。单元格的 TableView 与我的 tableView 匹配(有一些中间 UITableViewWrapperView 作为直接 super View )。但是看看 indexPathForCell: 是如何返回 nil 的?我确定该单元格是可见的。

我认为这无关紧要,但我开始使用的 cell 的 subview 是一个 UICollectionView,我在 Collection View 的数据源方法上调用它.

有什么想法吗?

编辑更多上下文...

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];

// do stuff to setup the cell
// now reload the collection view that it contains
UICollectionView *collectionView = (UICollectionView *)[cell viewWithTag:33];
[collectionView reloadData];

return cell;
}

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
NSIndexPath *indexPath = [self indexPathContainingView:collectionView];
return // get my model from the index path and return the count of an array it contains
// but here's the problem. index path is nil here
}

最佳答案

假设您正在使用 Storyboard,并且如果您愿意更改您正在使用的方法,则可能的解决方案是(我认为这是一个更简洁的解决方案):

将单元格内的 UICollectionView 的 socket 拖到 UITableViewCell 中。在您的 Storyboard中,通过拖动 socket 再次将 UICollectionViewdelegatedataSource 设置为您的类。当然,您必须使用自定义 UITableViewCell

UITableViewcellForRowAtIndexPath 中,将 UICollectionView 的标签设置为 indexPath.row 。现在,在您的 numberOfItemsInSection 中,您可以访问 UICollectionView 标记属性,它将包含 UITableViewCellindexPath.row您正在尝试访问,因此您可以访问您的模型。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];

// do stuff to setup the cell
// now reload the collection view that it contains
cell.collectionView.tag = indexPath.row;
[cell.collectionView reloadData];
return cell;
}

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {

// get my model from the index path and return the count of an array it contains
Model *model = dataArray[collectionView.tag];

return model.count;

}

关于ios - indexPathForCell : returning nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40706141/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com