Xcode、Obj-c、iOS 5.2 iOS 6.0
我有一个 UISegmentedControl 正在使用这样的东西插入底部工具栏:
-(void) makeSegmentedControl {
self.SegControl = [[UISegmentedControl alloc] initWithItems:@[@"Title1",@"Title2"]];
self.SegControl.segmentedControlStyle = UISegmentedControlStyleBar;
[self.SegControl setTarget:self action:@selector(handleSegment) forControlEvents:UIControlEventValueChanged]
[self.SegControl setSelectedSegmentIndex:0];
}
-(void) AddSegmentedControlToToolbar {
UIBarButtonItem *tmp = [UIBarButtonItem new];
[tmp setCustomView:self.SegControl];
[self.navigationController.toolbar setItems@[tmp]];
}
-(void) tintSegmentedControl {
for (int i = 0; i< [self.SegControl.subviews count]; i++) {
[[self.SegControl.subviews objectAtIndex:i] setTint:[UIcolor greenColor];
}
NSArray * sortedViews = [self.SegControl.subviews sortArrayUsingFunction:sortFunction];
[[sortedViews objectAtIndex:self.SegControl.selectedSegmentIndex] setTintColor:[UIColor lightGreenColor]];
for (id view in self.SegControl.subviews) {
[view removeFromSuperView];
}
for (id view in sortedViews) {
[self.SegControl addSubview:view];
}
}
-(void)viewDidLoad {
[self makeSegmentedControl];
[self addSegmentedControlToToobar];
[self tintSegmentedControl];
}
-(void) handleSegment {
[self tintSegmentedControl];
}
当我在我们的应用程序中运行类似的代码时,它会显示一个非常蓝色的 UISegmentedController,它会在单击时变为绿色。我已经尝试了一些事情,似乎 UISegments 上的色调只是拒绝坚持到视图完成加载之后。知道这里发生了什么吗?
编辑
因此,事实证明我实际上使用的是 iOS 6.0 模拟器,并且 iOS 6 中有一个限制,即您不能在 ViewDidAppear:Animated: 运行之前为 UISegmentedController 着色。我认为这是问题所在,因为当我进行此更改时:
-(void)viewDidLoad {
[self makeSegmentedControl];
[self addSegmentedControlToToobar];
}
-(void)viewDidAppear {
[NSTimer timerWithTimeInterval:0 target:self selector:@selector(tintSegmentedControl) userInfo:nil repeats:NO];
}
有用。不是 100% 确定发生了什么。有没有更简单的方法?