2012-09-24 6 views
0

나는 UISegment을 만들려면이 코드를 사용 : iOS5를 수평에서 제어 부하 제목, iOS6가있는 동안 수직에서 온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 

. 왜 이런거야? iOS6에 변화가 있었습니까?

답변

4

당신은 UISegmentedControl의 내부 역학에 만만찮은 자세를 취하고 있습니다. 기술적으로 개인 API를 사용하는 동안 공개적으로 문서화되지 않은 UIKit 부분에 계속 액세스하고 있습니다.

iOS 6에서 동작이 변경되었을 수있는 한 가지 이유는 세그먼트 화 된 컨트롤이 현재 다른 곳에서 layoutSubviews 개개의 하위 뷰를 지연 빌드 할 수 있기 때문일 수 있습니다. 심지어 하위 뷰를 전혀 사용하지 않을 수도 있습니다. 하지만 여기서 추측 만하고 있습니다. 그러나 프레임 워크의 문서화되지 않은 내부 구조를 변경하는 것은 Apple의 선택입니다.

배송 앱에 코드를 사용해서는 안됩니다. 빌드 인 분할 컨트롤에서 수행 할 수없는이 작업 (세로 세그먼트?)을 직접 수행하려면 빌드하십시오.

+0

그래서, 어떻게 할 수 있습니까? – Alessandro

+2

무엇을할까요? 수직 셀을 사용하여 분할 된 컨트롤을 만드시겠습니까? 테이블 뷰를 사용할 수 있습니다. –