多个按钮,但一次只按一个按钮

时间:2015-06-09 09:23:12

标签: ios objective-c uibutton

我一直在浏览网站,但我找不到任何能回答我问题的内容。在我的应用程序中,我有一个模式对话框,显示一个UICollectionView使用自定义单元格,只包含一个UIButton。

我已将按钮设置为可选择而非单击。我想只允许一次选择一个按钮,当选择一个按钮时,我希望禁用该部分中的其他按钮。我不知道如何解决这个问题,因为我对IOS还不熟悉。下面的屏幕截图显示了模型和按钮的基本外观。

目前我可以选择多个按钮,但我需要它是单个选择,当选择一个按钮时,其余按钮被禁用。目前我在类中为我的自定义UICollectionViewCell提供了所选内容,我将其包含在下面。任何帮助和建议都会很棒,我只需指向正确的方向。

- (IBAction)Selected:(id)sender {
    if(_Button.selected == 0)
    {
        [_Button setSelected:YES];        
    }
    else
    {
        [_Button setSelected:NO];
    }
}

enter image description here

3 个答案:

答案 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