分段控制器隐藏段0

时间:2014-10-03 03:15:43

标签: ios objective-c uisegmentedcontrol

我使用界面构建器创建了一个分段控制器,它看起来像这样

enter image description here

有时我使用此

将其设置为4
[segmentedControl insertSegmentWithTitle:@"Dinner" atIndex:2 animated:YES];
[segmentedControl insertSegmentWithTitle:@"Latenight" atIndex:3 animated:YES];

哪个有效,但很好,但这是我的问题出现的地方,有时我只想吃早餐和晚餐,深夜却没有午餐。但是我仍然希望晚餐在索引2和深夜在索引3处。所以我所拥有的代码根据索引的数量不需要多次更改。我知道[segmentedControl setEnabled:NO forSegmentAtIndex:0];但它看起来并不好,而不是我想做的事情?

基本上有一种方法我可以隐藏午餐指数,以便晚餐仍然在索引2,和/或将晚餐设置为索引2,即使没有午餐段吗?

感谢您的帮助! :)

修改

-(IBAction)selectMeal:(id)sender{


        switch (((UISegmentedControl *) sender) .selectedSegmentIndex) {
            case 0:
                if ([dayInfo isEqualToString:@"Monday"]) {
                    deliString = @"//day[@name='monday']/meal[@name='LUNCH']/counter[@name='Deli']/dish/name";
                }
             case 1:if ([dayInfo isEqualToString:@"Monday"]) {
                    deliString = @"//day[@name='monday']/meal[@name='Dinner']/counter[@name='Deli']/dish/name";
                }

试过这个:

        indexBreakfast = -1;
        indexLunch = 0;
        indexDinner = 1;
        [segmentedControl removeSegmentAtIndex:indexBreakfast animated:YES];
        [segmentedControl insertSegmentWithTitle:@"Dinner" atIndex:indexDinner animated:YES];

2 个答案:

答案 0 :(得分:3)

请不要使用那种方法。我知道你希望能够知道哪种类型与没有查找的索引相对应,但它只是懒惰。

这是另一种方法。当您确定要显示哪些选项时,存储一个选项数组(包装的枚举值,字符串标题,等等)。触发目标操作后,从所选段的索引处的数组中获取类型。完成。

在您的班级中,创建一个属性来存储订单

@property (nonatomic, strong) NSArray *mealStrings;

然后,当您确定了您想要的食物和顺序时,请使用值

创建一个数组
self.mealStrings = @[@"Breakfast", @"Lunch"];

...并初始化UISegmentedControl ...

self.segmentedControl = [[UISegmentedControl alloc] initWithItems:self.mealStrings];

然后,当您需要知道哪一餐时,您可以使用

访问该类型
NSString *mealName = self.mealStrings[self.segmentedControl.selectedSegmentIndex];

答案 1 :(得分:0)

无法隐藏细分受众群。必须删除或禁用它。并且由于您要删除该段,因此您需要一种很好的方法来处理具有不同含义的段索引,具体取决于可见的段。

一个选项是为每个可能的段定义一个ivar,并在构建和调整分段控件时将其设置为相应的段索引。

假设你有四个可能的部分 - 早餐,午餐,晚餐和深夜。添加这四个ivars:

NSInteger indexBreakfast, indexLunch, indexDinner, indexLateNight;

现在,当您构建分段控件时,请设置这四个ivars以匹配相应段的实际段索引。如果细分不可见,请将-1分配给ivar。

现在您的细分处理代码可以是:

-(IBAction)selectMeal:(UISegmentedControl *)control {
    NSInteger index = control.selectedSegmentIndex;

    if (index == indexBreakfast) {
        // handle breakfast
    } else if (index == indexLunch) {
        // handle lunch
    } else if (index == indexDinner) {
        // handle dinner
    } else if (index == indexLateNight) {
        // handle late night
    }
}

如果您在应用运行时添加,删除或重新排序细分,只需更新四个ivars,其余代码就会做正确的事。