以编程方式更改UISegmentedControl选定的索引或值

我有一个UISegmentedControl与两段(索引:0和1),我试图以编程方式重置为0.当我运行下面的命令它不重置预期的段索引为0。 相反,它突出显示了索引1的分段。

[seg setSelectedSegmentIndex:0]; 

奇怪的是,当我login选定的段,它返回0

  NSLog(@"seg setSelectedSegmentIndex %d", seg.selectedSegmentIndex); 

奇怪的是,运行setSelectedSegmentIndex:0我不能通过触摸手动重新select段0,它似乎被locking到段1,直到我点击1,其中它正常工作。

这里是button的设置:

  itemArray = [NSMutableArray arrayWithObjects: @"Zero", @"One", nil]; seg = [[UISegmentedControl alloc] initWithItems:itemArray]; [seg setFrame:segRect]; seg.segmentedControlStyle = UISegmentedControlStyleBar; seg.momentary = NO; [seg addTarget:self action:@selector(someAction:) forControlEvents: UIControlEventValueChanged]; [mainView addSubview:seg]; 

注意:要重申我想要完成的这个问题:我想通过dynamicvariables设置一个UISegmentedControl的select索引,获得适当的视觉反馈,并检查方法中选定的索引,根据所选内容指数。 看到我的答案下面的解决scheme。

更改viewDidLoad:

 [seg setSelectedSegmentIndex:index]; 

你改变使用索引值作为你的愿望。

从代码,你可以做seg.selectedSegmentIndex = someDefaultIndex

是否应该将其设置在viewDidLoad:是否完全取决于应用程序的结构。 例如,如果您的应用程序第一次启动并加载视图,并且需要将控件设置为应用程序上一次运行期间的任何值,那么在此处执行此操作绝对有意义。

这有助于根据视觉反馈对select的片段进行sorting,即在编程设置选定的片段之后,将正确地对片段着色。

 for (int i=0; i<[seg.subviews count]; i++) { if ([[seg.subviews objectAtIndex:i] respondsToSelector:@selector(isSelected)] && [[seg.subviews objectAtIndex:i]isSelected]) { [[seg.subviews objectAtIndex:i] setTintColor:[UIColor grayColor]]; } if ([[seg.subviews objectAtIndex:i] respondsToSelector:@selector(isSelected)] && ![[seg.subviews objectAtIndex:i] isSelected]) { [[seg.subviews objectAtIndex:i] setTintColor:[UIColor blackColor]]; } } 

要重申我正在试图用这个问题来完成:我想通过一个variablesdynamic地设置一个UISegmentedControl的select索引,获得适当的视觉反馈,并检查方法中select的索引,根据所选的索引做出事情。

最初我猜想,这是简单的:mySegmentedController.selectedSegmentIndex = someIndex,然后testing索引。 但正如我的问题所述,这不适合我。 行为很奇怪。 运行该代码后,相应的button将不会突出显示。

这里是我修复它的一个项目,所以它工作。 不确定为什么它的工作原理。 在设定指数之前,我可能会拖延。 如果我可以改进它,我会更新和评论项目文件。

http://owolf.net/uploads/StackOverflow/SegmentedControllers.zip

警告:这不是完全回答这个问题,而是密切相关的。

我有一个类似的问题。 大多数时候我的UISegmentedController工作正常。 它有4个部分,关,30,60和120。

以随机间隔(通常在发布之前!!),closures部分变成不可从用户界面select。 (我没有尝试从代码中select它,因为这不是我需要做的,并不能解决我的问题。)

解决方法是从我的XIB中删除该UISegmentedController,并用一个新的(和完全相同的),然后工作正常。

我甚至把CMD-C和CMD-V把这个违规的UISegmentedController放到了另一个App的XIB中。 而closures段(即索引0处的closures段)在该XIB中也是不可select的。

这似乎是XCode的一个问题。

Swift 3.0

 segmentedControl.selectedSegmentIndex = #your value#