我一直在浏览网站,但我找不到任何能回答我问题的内容。在我的应用程序中,我有一个模式对话框,显示一个UICollectionView使用自定义单元格,只包含一个UIButton。
我已将按钮设置为可选择而非单击。我想只允许一次选择一个按钮,当选择一个按钮时,我希望禁用该部分中的其他按钮。我不知道如何解决这个问题,因为我对IOS还不熟悉。下面的屏幕截图显示了模型和按钮的基本外观。
目前我可以选择多个按钮,但我需要它是单个选择,当选择一个按钮时,其余按钮被禁用。目前我在类中为我的自定义UICollectionViewCell提供了所选内容,我将其包含在下面。任何帮助和建议都会很棒,我只需指向正确的方向。
- (IBAction)Selected:(id)sender {
if(_Button.selected == 0)
{
[_Button setSelected:YES];
}
else
{
[_Button setSelected:NO];
}
}
答案 0 :(得分:1)
在集合视图中使用数据源方法
- collectionView:cellForItemAtIndexPath:
在配置单元格时,将indexPath项目值设置为单元格中相应按钮的标记。
然后维护一个属性,previousSelectedButtonIndex
,您可以在其中维护以前选择的索引的值。
在按钮点击处理程序中,如果previousSelectedButtonIndex
包含值,如果是,则取消选择该按钮,选择新按钮并将previousSelectedButtonIndex
设置为新值。
请注意,您可能需要进行一些错误处理,但基本上这就是它的实现方式。
答案 1 :(得分:0)
将一个全局变量声明为
NSInteger selectedIndex;
还将-1值设置为selectedIndex
,因为最初没有选择按钮。
selectedIndex = -1;
然后写入UICollectionView
- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
//here create cell object of UICollectionViewCell
cell.button.tag = indexPath.row;
[cell.button addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
if(indexPath.row == selectedIndex)
{
//show this button as selected by setting different name/color/image for button
cell.button.enabled = TRUE;
}
else
cell.button.enabled = FALSE;
return cell;
}
- (void) buttonPressed:(id)sender
{
UIButton *selectedButton = (UIButton *)sender;
if(selectedIndex == selectedButton.tag)
selectedIndex = -1; //deselect the selected button
else
selectedIndex = selectedButton.tag; //select the tapped button
[self.collectionView reloadData];
}
答案 2 :(得分:0)
你应该使用一组按钮。 Apple已经能够同时控制一系列按钮。试着阅读本文,了解如何实现这一目标。 Outlet Collections