2012-09-24 46 views
0

我用这个代码创建一个UISegment:IOS 6 UISegmentedControl

//segment controll 

      NSString *key2 = [allKeys2 objectAtIndex:i]; 

      NSString *obj2 = [DictionaryHomework objectForKey:key2]; 

      int val; 
      val = [obj2 intValue]; 

      //segment controll 

      NSArray *itemArray2 = [NSArray arrayWithObjects: @"very easy", @"easy", @"ok", @"hard", @"challenging", nil]; 
      UISegmentedControl *segmentedControl2 = [[UISegmentedControl alloc] initWithItems:itemArray2]; 
      segmentedControl2.frame = CGRectMake(480, -60, 130, 350); 
      segmentedControl2.segmentedControlStyle = UISegmentedControlStyleBar; 
      segmentedControl2.selectedSegmentIndex = val - 1; 
      [segmentedControl2 addTarget:self action:@selector(segmentedControlHomework:) forControlEvents:UIControlEventValueChanged]; 

      segmentedControl2.transform = 
      CGAffineTransformRotate(segmentedControl2.transform, degreesToRadians(90)); 

      NSArray *arr = [segmentedControl2 subviews]; 
      for (int i = 0; i < [arr count]; i++) { 
       UIView *v = (UIView*) [arr objectAtIndex:i]; 
       NSArray *subarr = [v subviews]; 
       for (int j = 0; j < [subarr count]; j++) { 
        if ([[subarr objectAtIndex:j] isKindOfClass:[UILabel class]]) { 
         UILabel *l = (UILabel*) [subarr objectAtIndex:j]; 
         l.transform = CGAffineTransformMakeRotation(- M_PI/2.0); //do the reverse of what Ben did 
        } 
       } 
      } 

      [image1 addSubview:segmentedControl2]; 

      segmentedControl2.tag = i; 

      [segmentArray addObject: segmentedControl2]; 

      //segment control 

在iOS5的控制负载职称的水平,而在iOS6的垂直。为什么是这样? iOS6有变化吗?

回答

4

您正在摆弄UISegmentedControl的内部机制。虽然您不是技术上使用私人API,您仍然访问UIKit部分未公开记录。

iOS 6中行为可能发生变化的一个原因可能是分段控件现在在其他地方懒洋洋地在layoutSubviews中构建其子视图。它甚至可能根本不使用子视图。但我只是在这里猜测。但是,苹果选择更改框架的无证内部。

您的代码应该永远不会在运输应用程序中使用。如果你想要做这样的事情(纵向分段?),内置的分段控制无法做到,请自行构建。

+0

那么,没办法做到这一点? – Alessandro

+2

做什么?用垂直单元建立分段控制?您可以使用表格视图。 –