代码之家  ›  专栏  ›  技术社区  ›  humblePilgrim

在UISegmentedControl中保持选择

  •  3
  • humblePilgrim  · 技术社区  · 15 年前

    i、 即使用户选择了另一个段,也可以保持一个段处于选中状态?? 我好像在任何地方都找不到这种东西!!

    3 回复  |  直到 15 年前
        1
  •  0
  •   Community Mohan Dere    9 年前

    这是不可能的开箱即用(看到了吗 How can I enable multiple segments of a UISegmentedControl to be selected?

    你可以试试 this code

        2
  •  0
  •   humblePilgrim    15 年前

    我找到了一种方法来解决这个问题。我将深色图像放在每个片段后面,并将它们的隐藏属性设置为true。然后我降低uisegmented控件的alpha值。然后在代码中单击一个片段时,我相应地打开或关闭可见性,因此多个片段显示为选中状态

        3
  •  0
  •   Community Mohan Dere    9 年前

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

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

    这样做,原则上您可以访问UISegmentedControl的私有成员变量。特别是,您可以访问包含按钮段的数组,您可以通过重写setSelectedSegmentI根据需要对其进行操作ndex:selectedSegmentIndex:。但是,由于各种原因,仍不应直接访问声明为private的属性,请参见 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 ,我不太确定这是否真的是一个有效的方法。