将UIButton添加到UICollectionViewCell时的奇怪行为

Pau*_*ian 0 objective-c uibutton uiimageview ios uicollectionviewcell

我正在尝试添加UIButton一个UICollectionViewCell.该按钮的主要目的是让用户选择他们的收藏夹.

当他们点击时UIButton,UIButton会显示一个发光的星形图像,显示该项目已被选为收藏.

UIButton再次单击,按钮返回以显示带有空星的原始图像,这意味着取消选择.

我意识到这一点的方式如下:

1 - 在故事板中,将UIButton放入UICollectionViewCell,按住Ctrl键将按钮拖动到单元格的.h文件中以设置一个名为

-(IBAction)favoriteBtnClick:(id)sender;
Run Code Online (Sandbox Code Playgroud)

2 - 在单元格的.m文件中,按如下方式编辑操作:

-(IBAction)favoriteBtnClick:(id)sender {
    if ([self.favoriteChecked isEqualToString:@"NO"]) {
        UIImage *image = [UIImage imageNamed:@"FavoriteSelected.PNG"];
        [sender setBackgroundImage:image forState:UIControlStateNormal];
        self.favoriteChecked = @"YES";
    } else if ([self.favoriteChecked isEqualToString:@"YES"]) {
        UIImage *image = [UIImage imageNamed:@"FavoriteBlank.PNG"];
        [sender setBackgroundImage:image forState:UIControlStateNormal];
    }    
}
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试运行时UICollectionView,当我单击一个单元格上的按钮时,发生了"奇怪"的行为:

1 - 在向下滚动列表后,单击一个单元格将一个按钮转到最喜欢的发光星形,下面其他一些单元格上的按钮也会被选中.

2 - 切换仅在一个周期内起作用.完成第一轮选择和取消选择后,进一步点击后不再有反应.

任何人都可以帮我理解这个的原因,并可能给我一些如何解决它的提示?

谢谢!

问候,保罗

Joe*_*ews 6

在按钮操作中添加此代码

CGPoint ButtonPoint = [sender convertPoint:CGPointZero toView:self.collectionView];
    NSIndexPath *ButtonIndex = [self.collectionView indexPathForItemAtPoint:ButtonPoint];
buttonindexpath = ButtonIndex.row
[collectionView reloadData];
Run Code Online (Sandbox Code Playgroud)

现在在你的cellForItemAtIndexPath中,检查indexPath.row == buttonindexpath,如果是,则给出你在按钮动作中给出的代码....即......

if (indexPath.row == buttonindexpath)
{
    if ([self.favoriteChecked isEqualToString:@"NO"]) 
    {
        UIImage *image = [UIImage imageNamed:@"FavoriteSelected.PNG"];
        [sender setBackgroundImage:image forState:UIControlStateNormal];
        self.favoriteChecked = @"YES";
    }
    else if ([self.favoriteChecked isEqualToString:@"YES"]) 
    {
        UIImage *image = [UIImage imageNamed:@"FavoriteBlank.PNG"];
        [sender setBackgroundImage:image forState:UIControlStateNormal];
    }
Run Code Online (Sandbox Code Playgroud)

}

希望这很好