2015-06-09 169 views
0

我一直在瀏覽網站,我一直無法找到任何答案我的問題。在我的應用程序中,我有一個模式對話框,顯示使用自定義單元格的UICollectionView,並且只包含一個UIButton。多個按鈕,但一次只能按一個按鈕

我已經設置了按鈕可以選擇,而不是單擊。我想只允許一次選擇一個按鈕,並且當選擇一個按鈕時,我希望該部分中的其他按鈕被禁用。我不確定如何去解決這個問題,因爲我對IOS還很陌生。下面的屏幕截圖顯示了模型和按鈕的基本外觀。

目前我可以選擇多個按鈕,但我需要它是單個選擇,當選擇了一個按鈕時,其餘的都被禁用。目前,我將自定義的UICollectionViewCell中的選定內容交給了該類,並將其包含在下面。任何幫助和建議將是偉大的,我只需要指出正確的方向。

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

enter image description here

+0

嘗試設置所有按鈕的專屬觸摸 - [按鈕setExclusiveTouch:YES]; – developer

+0

@developer我試過了,我通過集合視圖中的所有可見單元格來訪問按鈕並將setExclusiveTouch設置爲yes,但它仍然是多選擇可悲的。 –

回答

0

在集合視圖數據源方法 - collectionView:cellForItemAtIndexPath:當所配置的小區,設定indexPath項目值作爲在細胞中相應的按鈕的代碼。

然後保留一個屬性說,previousSelectedButtonIndex其中你可以維護之前選擇的索引的值。

在您的按鈕點擊處理程序中,如果previousSelectedButtonIndex包含一個值,並且如果是,取消選擇該按鈕,請選擇新按鈕並將previousSelectedButtonIndex設置爲新值。

請注意,您可能需要做一些錯誤處理,但基本上這是如何實現的。

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]; 
    } 
0

數據源的方法你或許應該使用的按鈕的集合。蘋果已經賦予了同時控制一系列按鈕的能力。嘗試閱讀以瞭解如何實現這一目標。 Outlet Collections