在UISegmentedControl中维护选择

时间:2010-08-12 13:16:06

标签: iphone objective-c xcode

我可以维持UISegmentViewControl段的选定状态吗? 即使用户选择另一个段,即可保持一个段被选中? 我似乎找不到任何可以做到这一点的任何东西!!

3 个答案:

答案 0 :(得分:0)

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

您可以尝试this code之类的功能来提供类似的功能。

答案 1 :(得分:0)

我找到了一种方法。我在每个段后面放置了深色图像并将其隐藏属性设置为true。然后我递减了uisegmented控件的alpha值。然后在代码中单击一个段时我转动了可见性相应地打开或关闭,因此选择了多个片段

答案 2 :(得分:0)

另一种解决方案可能是使用类别:

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

这样做,您原则上可以访问UISegmentedControl的私有成员变量。特别是,您可以访问包含按钮段的数组,您可以通过覆盖setSelectedSegmentIndex:selectedSegmentIndex来根据需要进行操作:。但是,由于各种原因,不应直接访问声明为private的属性,请参阅{ {3}}。正如在那里建议的那样,你可以更好地滥用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 link,我不太确定这是否真的是一种有效的方法。