2012-09-24 79 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

做什麼?用垂直單元建立分段控制?您可以使用表格視圖。 –