【问题标题】:Make default value of Segment unselected取消选择 Segment 的默认值
【发布时间】:2020-12-01 02:05:28
【问题描述】:

我正在尝试使用数组加载段控件。当我这样做时,它选择男性作为默认值。我不希望选择男性或女性,默认情况下都未选择。

- (id)initWithAnimal:(ITAnimal *)Animal isEdit:(BOOL)isEdit
{
self = [super init];
if (self) {
    // Custom initialization
    _Animal = Animal;
    _genders = [NSArray arrayWithObjects:@"Male", @"Female", nil];
    if (!_Animal) {
        _Animal = [[ITData sharedObject] managedObjectFromName:@"ITAnimal"];
        _Animal.gender = [_genders objectAtIndex:0];

    }
    _isEdit = isEdit;

    // gender controll
    self.genderControl = [[UISegmentedControl alloc] initWithItems:_genders];
    [self.genderControl addTarget:self action:@selector(genderChanged:) forControlEvents:UIControlEventAllEvents];
    }
    return self;
}





}
else if (indexPath.row == 2) {
    BOOL isIn = NO;
    for (id view in cell.contentView.subviews) {
        if ([view isEqual:self.genderControl]) isIn = YES;
    }
    if (!isIn) [cell.contentView addSubview:self.genderControl];

    [cell.detailTextLabel setHidden:_isEdit];
    [self.genderControl setSelectedSegmentIndex:[_genders indexOfObject:content]];

    [self.genderControl setHidden:!_isEdit];
}

【问题讨论】:

    标签: ios objective-c xcode uisegmentedcontrol


    【解决方案1】:

    你应该使用:

    [self.genderControl setSelectedSegmentIndex:UISegmentedControlNoSegment];
    

    From Apple's doc:

    默认值为 UISegmentedControlNoSegment(未选择段) 直到用户触摸一个片段。将此属性设置为 -1 以关闭 当前选择。 UISegmentedControl 忽略此属性时 控制处于瞬时模式。

    【讨论】:

    • 我上面有[self.genderControl setSelectedSegmentIndex:[_genders indexOfObject:content]];
    • 请解释问题,因为您编辑的代码没有解释它
    • 通过将 [self.genderControl setSelectedSegmentIndex:-1]; 添加到 isEdit 状态它可以工作,但是,每次我重新编辑它时,它都会返回到 Unselected for both
    • 更正它可能会取消选择但仍以男性身份保存到数据库中。我很困惑这是怎么回事......
    • 你的意思是segmentedcontrol显示为未选中,并且选中的索引不是-1?
    【解决方案2】:

    你正在寻找

    [segmentcontrol setSelectedSegmentIndex:-1];
    

    【讨论】:

      【解决方案3】:

      我不知道这对某人来说是否仍然是个问题.. 但是如果您使用的是故事板.. 选择您放置在 viewController 和属性 Inspector 上的 segmentedIndex --> Segmented Control --> Behavior 取消选中复选框选择..

      【讨论】:

        【解决方案4】:

        如果您在这里寻找 SwiftUI 的解决方案,只需将您的 currentSelection 值默认设置为 -1。

           struct Parent: View {
            
              @State private var currentSelection = -1
              
              var segmentOptions = ["Green", "Blue"]
              
              var body: some View {
                HStack {
                    
                    Picker(selection: $currentSelection, label: Text("What is your favorite color?")) {
                        ForEach(0..<segmentOptions.count) { index in
                            Text(self.segmentOptions[index]).tag(index)
                        }
                    }.pickerStyle(SegmentedPickerStyle())
                }
              }
            }
        

        【讨论】:

          猜你喜欢
          • 2020-12-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-26
          • 2021-01-27
          • 1970-01-01
          • 1970-01-01
          • 2021-03-27
          相关资源
          最近更新 更多