我使用界面构建器创建了一个分段控制器,它看起来像这样
有时我使用此
将其设置为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];
答案 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,其余代码就会做正确的事。