【发布时间】:2011-07-03 00:48:15
【问题描述】:
我可以保持 UISegmentViewControl 段的选定状态吗? 即即使用户选择另一个段,也可以保持一个段显示为选中状态? 我似乎在任何地方都找不到任何可以做到这一点的东西!
【问题讨论】:
标签: iphone objective-c xcode
我可以保持 UISegmentViewControl 段的选定状态吗? 即即使用户选择另一个段,也可以保持一个段显示为选中状态? 我似乎在任何地方都找不到任何可以做到这一点的东西!
【问题讨论】:
标签: iphone objective-c xcode
这是不可能的。 (见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: 来根据需要对其进行操作。但是,由于各种原因,仍不应直接访问声明为私有的属性,请参阅@ 987654321@。正如那里所建议的那样,您宁愿滥用 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,我不太确定这是否真的是一种有效的方法。
【讨论】: