0

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% 确定发生了什么。有没有更简单的方法?

4

2 回答 2

1

试试这个代码

-(void) tintSegmentedControl {
    [self.SegControl setTintColor:[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];
      }
 }
于 2013-01-29T06:58:07.447 回答
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];
}
于 2013-02-05T21:52:21.527 回答