2011-12-19 122 views
1

我有三个UIButtons子类(RadioBox)。我正在努力使一次只能选择三个RadioBox中的一个。为此,我有两个委托方法; radioSelectedState和radioUnselectedState。分别调用这些方法来选择和取消选择RadioBox。不幸的是,到目前为止,我的代码只允许一次选择一个按钮,但是如果我取消选择当前选择的按钮,则按钮取消选择而不是保持相同的状态。只允许选择一个UIButton

请你能告诉我我哪里出错了吗?

谢谢先进。

- (void) radioSelectedState:(RadioBox *) rb { 

    if (selectedRadios == nil) { 
     selectedRadios = [[NSMutableArray alloc] init]; 
    } 

    if ([selectedRadios count] == 0) { 
     [selectedRadios addObject:rb]; 
    } 

    else if ([selectedRadios count] == 1 && ![selectedRadios containsObject:rb]) { 
     [(RadioBox *) [selectedRadios objectAtIndex:0] setState:RadioBoxStateUnselected]; 

     [selectedRadios removeObjectAtIndex:0]; 

     [selectedRadios addObject:rb]; 

    } 

    else if ([selectedRadios count] == 1 && [selectedRadios containsObject:rb]) { 
     return; 
    } 

} 

- (void) radioUnselectedState:(RadioBox *) rb { 

    if ([selectedRadios count] == 1) { 
     return; 
    } 

    [selectedRadios removeObject:rb]; 

} 
+0

为什么不使用[分段控制(http://developer.apple.com/library/ios/#documentation/uikit/reference/UISegmentedControl_Class/Reference/UISegmentedControl.html )?它们是为这种应用而设计的。 – Hyperbole 2011-12-19 17:10:52

+0

因为分段控制与我试图实现的完全无关。 – 2011-12-19 21:00:52

回答

0

添加一个新的方法,以您的协议

- (BOOL)radioCanUnselect:(RadioBox *)radioBox; 

调用此做任何取消选择之前,控制器只需回复YES/NO,然后你作出相应的反应。

你也可以做同样的其他方式

- (BOOL)radioCanSelect:(RadioBox *)radioBox; 

,并添加规则,有多少被允许在一次

1

来选择你可以很容易让你的RadioBox对象一个NSArray和环内通过它每次被选中时,确保其他人都被取消选中。

是这样的:

// This assumes you have your RadioBox objects inside an NSArray named radioBoxArray 
- (void)radioBoxTapped:(RadioBox *)rb { 
    for (RadioBox * box in radioBoxArray) { 
     [box setSelected:NO]; 
    } 

    [rb setSelected:YES]; 
} 
相关问题