gpt4 book ai didi

ios - Storyboard父子关系不代表 "superview"返回的内容

转载 作者:行者123 更新时间:2023-11-28 22:21:15 25 4
gpt4 key购买 nike

I have this layout in a collection view

Collection View Cell 的子类化方式如下:

enter image description here

我在 Collection View 中有这个布局。在创建每个按钮时,我调用以下代码:

    [cell.imageButton addTarget:self action:@selector(galleryImageButtonClicked:event:) forControlEvents:UIControlEventTouchUpOutside];

它调用这个:

    -(void)galleryImageButtonClicked:(id)sender event:(id)event
{
if ([sender isKindOfClass:[UIButton class]])
{
NSLog(@"Yay, it's a UIButton.");
SCCollectionViewCell* parentCellOfThisButton = (SCCollectionViewCell*)[sender superview];
if ([parentCellOfThisButton isKindOfClass:[SCCollectionViewCell class]])
{
UICollectionView *parentCollectionView = (UICollectionView* )[parentCellOfThisButton superview];
if ([parentCollectionView isKindOfClass:[UICollectionView class]])
{
NSIndexPath* indexPathOfCell = [parentCollectionView indexPathForCell:parentCellOfThisButton];



} else {
NSLog(@"Not a UIcollectionClass");
}
} else {
NSLog(@"ERROR! 15268679");
}
}
}

这行失败了:

        if ([parentCellOfThisButton isKindOfClass:[SCCollectionViewCell class]])

有人知道为什么吗?

最佳答案

为了工作,代码需要知道按钮在单元格 View 层次结构中的位置。编写一个更普遍地查找按钮单元格的方法可能会更好,如下所示:

- (UICollectionViewCell *)cellContainingSubview:(UIView *)view {

while (view && ![view isKindOfClass:[UICollectionViewCell self]]) {
view = [view superview];
}
return view;
}

然后在您的按钮方法中,无需检查发送者是否为按钮(只有按钮调用此选择器,对吧?)。像这样获取包含单元格:

SCCollectionViewCell* parentCellOfThisButton = (SCCollectionViewCell*)[self cellContainingSubview:sender];

请注意,只有当您知道只有 SCCollectionViewCells 包含使用此方法的按钮时,转换才可以。

关于ios - Storyboard父子关系不代表 "superview"返回的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20340714/

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