在UISegmentedControl中维护选择

问题描述:

我可以维护UISegmentViewControl段的选定状态吗? 即即使用户选择另一个分段,也可以保持一个分段显示选择 我似乎无法找到任何地方做到这一点!在UISegmentedControl中维护选择

这是不可能开箱即用的。 (请参阅How can I enable multiple segments of a UISegmentedControl to be selected?。)

您可以尝试类似this code的类似功能。

我找到了一个围绕这个的方法。我在每个段后面放置了深色的图像,并将它们的隐藏属性设置为true。然后我减少了uisegmented控件的alpha值。然后在代码中点击段时,可见开或关,所以多段出现另一种解决方案可能会使用一个类别中选择

#import <UIKit/UISegmentedControl.h> 
@interface UISegmentedControl (MultiSelect) 
@end 

这样做,你必须在原则上获得UISegmentedControl的私有成员变量。特别是,您可以访问保存按钮段的数组,通过重写setSelectedSegmentIndex:selectedSegmentIndex:。您可以根据需要操作按钮段。但是,由于各种原因,声明为私有的属性仍然不应直接访问,请参阅this link 。同样如此,您可以宁愿滥用KVC。所以实现可能看起来如下:

@implementation UISegmentedControl (MultiSelect) 
- (void)setSelectedSegmentIndex:(NSInteger)selectedSegmentIndex { 
    NSMutableArray *pArraySegments = [self valueForKey:@"segments"]; 
    if ((pArraySegments) && (selectedSegmentIndex >= 0) && (selectedSegmentIndex < [pArraySegments count])) { 
     UIButton *pSegment = (UIButton*)[pArraySegments objectAtIndex:selectedSegmentIndex]; 
     pSegment.selected ? (pSegment.selected = NO) : (pSegment.selected = YES); 
    } 
} 
@end 

这适用于我。但是,由于我现在阅读this discussion,我不太确定这是否是一种真正有效的方法。