2011-10-10 1 views
0

Xcode 4.2 Storyboard 사용하기, 방금 두 개의 세그먼트가있는 뷰에서 세그먼트 컨트롤을 만들었습니다. 그런 다음 각 세그먼트에서 별도의보기로 Ctrl 키를 누른 채 드래그하여 두 개의 단을 만듭니다. 개발자들은 하나의 세그먼트 만 생성 할 수 있기 때문에 세그먼트를 구별하는 것을 잊어 버린 것 같습니다. 'other'컨트롤 세그먼트에 대해 두 번째를 만들려고 시도하면 첫 번째 세그먼트가 두 번째 세그먼트로 대체됩니다. 누구나 이것에 대한 스토리 보드 해결 방법이 있습니까? 아니면 코드를 수동으로 작성해야합니까?XCode 4.2 + iOS 5 Storyboard : 세그먼트 제어 섹션을 세그먼트 생성기로 구분할 수 없습니까?

감사합니다.

+1

Ew ... 4.2가 여전히 NDA하에 있다고 가정합니다. 아마도 애플 개발자 포럼이 그것을 묻기에 적합한 장소 일 것이다. – p4010

+0

좋은 지적, 감사합니다! – KomodoDave

답변

2

4.2가 공개되었습니다.

문제는 사용자 지정 단락을 사용하여 스토리 보드로 해결할 수 있습니다. 커스텀 segue에서는 세그먼트 화 된 컨트롤을 테스트하여 어떤 컨트롤러를 호출할지 결정할 수 있습니다. 나는 다음과 같은 사용자 정의 SEGUE 테스트 한 : 아직의 전환을 구현하지 않은

#import "FlipTopPop.h" 

@interface UIViewController (Extension) 

@property (strong, nonatomic) IBOutlet UISegmentedControl *tabControl; 

@end 


@implementation FlipTopPop 

- (void) perform { 

UIViewController *src = (UIViewController *) self.sourceViewController; 
switch (src.tabControl.selectedSegmentIndex) { 
    case 0: 
     // go to settings 
     src.tabControl.selectedSegmentIndex = 1; //not yet implemented - for now don't segway - reset to index 1 for now 
     break; 
    case 1: 
     // this controller is called with index 1 - do nothing - should not get here 
     break; 
    case 2: { 
     [UIView transitionWithView:src.navigationController.view duration:0.5 
          options:UIViewAnimationOptionTransitionFlipFromTop 
         animations:^{ 
          [src.navigationController popViewControllerAnimated:NO]; 
         } 
         completion:NULL]; 
     } 
      break; 
     default: 
      break; 
    } 
} 

@end 

참고 경우 0 (세그먼트 0) 경우에 구현되는 것과 유사한 코드를 다른 컨트롤러로 전환합니다 2.

+0

그런 철저한 공유에 감사드립니다. TJ. – KomodoDave

0

다음 상황에서이 상황을 해결했습니다. 나는 스토리 보드의 도구 모음에 분할 된 컨트롤을 추가했습니다. 먼저 바 버튼을 추가 한 다음 세그먼트 화 된 컨트롤을 추가하여이를 수행해야합니다. 내 세그먼트 컨트롤에는 각각 다른보기로 연결되는 세 개의 세그먼트가 있습니다. 현재 뷰는 두 개의 다른 뷰에 대한 두 개의 뷰가 필요하다는 것을 나타냅니다. 그런 다음 도구 모음의 오른쪽에있는보기에서 두 개의 단추를 만들었습니다. 두 컨트롤을 클릭하여 두 개의 필수 컨트롤러를 생성합니다. 또한 아래의 코드에서 IBAction에 보낸 "값 변경"액션을 첨부했습니다. 다음과 같이 나머지는 코드에서 구현됩니다

- (IBAction)segmentChanged:(id)sender { 
    switch (self.segmentedControl.selectedSegmentIndex) { 
     case 0: 
      [self performSegueWithIdentifier: @"goToSettings" sender: self]; 
      break; 
     case 1: 
      // aready here - do nothing 
      break; 
     case 2: 
      [self performSegueWithIdentifier: @"returnToNotes" 
             sender: self]; 
      break; 
     default: 
      break; 
    } 
} 


- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([[segue identifier] isEqualToString:@"goToSettings"]) { 
     [[segue destinationViewController] setManagedObjectContext:self.managedObjectContext]; 
     // do nothing special 
    } 
    if ([[segue identifier] isEqualToString:@"returnToNotes"]) { 
     // do nothing special 
    } 
} 

현재에 이것은 viewWillAppear 방법에 다음 문을 사용하여 수행되는 것을보기 콘 보여주기 위해 선택된 세그먼트 인덱스 유지 할 필요가있다 :.

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
    self.segmentedControl.selectedSegmentIndex = 1; // the index for the current view 
} 

비슷한 코드가 세분화 된 컨트롤에 의해 선택된 세 개의보기 컨트롤러에 구현됩니다. 이 솔루션은 코드에서 모든 작업을 수행하는 것과 크게 다르지 않지만 스토리 보드가 뷰와 뷰 전환 (세그)을 반영한다는 장점이 있습니다.