2012-01-13 7 views
0

Segue를 사용하여 Popover보기를 닫으려고하면 UIBarButtonItem이 (가) 클릭됩니다.Segue Popover가 올바르게 동작하지 않습니다.

내가보기 아무것도하지만에 고정되지 않은 일반 SEGUE를 생성하고 그것을

내가가 인터페이스 빌더에 UIBarButtonItem을 정박 한 이름을 부여했습니다

- (IBAction)clickedSettings:(id)sender { 

    if(self.popSegue != nil) { 
     [self.popSegue.popoverController dismissPopoverAnimated:YES]; 
    } else { 
     //Current says only a button may 
     [self performSegueWithIdentifier:@"Settings" sender:sender]; 
    } 
} 

그러나 때를 응용 프로그램을 종료

인해 캐치되지 않는 예외 'NSInternalInconsistencyException', 이유에 : 'UIStoryboardPopoverSegue이 바 버튼 항목에서 제시해야합니다 지금까지 나는 그것이 나에게 오류를주는 SEGUE를 표시하는 버튼을 클릭 또는보기. "

그것도 명중하지 않는

내 내가 스택에 다음과 같은 질문을 읽은 -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

:

  1. iOS:How to dismiss Popover
  2. UIBarButtonItem + popover segue creates multiple popovers

하지만 난 여전히 같은를 얻을 수 오류. 내 인생 내가 여러 StackOverflow의 스레드를 겪고에서의 모든 비트를 가지고 있기 때문에

+0

이 문제에 대한 해결책을 찾았습니까? – iosMentalist

답변

3

잘못되어 가고 나는 이것에 대한 더 신용을하지 알아낼 수는 없지만, 나는 작업이있어 ​​:

@interface MyViewController() 
- (IBAction) toggleSettingsInPopover: (id) sender; 
@property (nonatomic, strong) UIStoryboardPopoverSegue *settingsPopoverSegue; 
@end 

@implementation MyViewController 
@synthesize settingsPopoverSegue = _settingsPopoverSegue; 

- (IBAction) toggleSettingsInPopover: (id) sender { 
    if([self.settingsPopoverSegue.popoverController isPopoverVisible]) { 
     [self.settingsPopoverSegue.popoverController dismissPopoverAnimated: YES]; 
     self.settingsPopoverSegue = nil; 
    } else { 
     [self performSegueWithIdentifier: @"Settings" sender: sender]; 
    } 
} 

- (void) prepareForSegue: (UIStoryboardSegue *) segue sender: (id) sender { 
    if([segue.identifier isEqualToString: @"Settings"]) { 
     if([segue isKindOfClass: [UIStoryboardPopoverSegue class]]) 
      self.settingsPopoverSegue = (UIStoryboardPopoverSegue *) segue; 
     MySettingsViewController *msvc = segue.destinationViewController; 
     msvc.delegate = self; 
    } 
} 
@end 

내 스토리 보드에서 내 설정 막대 버튼 항목을 MyViewController으로 컨트롤을 드래그하고 toggleSettingsInPopover 동작에 연결했습니다. 그런 다음 MyViewController에서 설정을보기 위해 segue를 만들기 위해 컨트롤을 드래그하고 그 유형을 popover으로 설정하고 식별자를 Settings으로 설정하고 방향을 위와 왼쪽으로 설정합니다 (툴바는 화면 하단에 있고 버튼은 오른쪽 끝에 있음)을 선택한 다음 해당 Anchor에서 조치에 연결된 막대 버튼 항목으로 끌었습니다.

+0

글쎄, 나는 많은 실을 샅샅이 뒤졌고 당신의 대답은 확실히 신용의 가치가있다! :-) – Abdo

2

segue Attribute Inspector에서 UIBarButton으로 앵커 필드를 Ctrl 키를 누른 채 드래그하여 세그를 UIBarButton에 고정해야합니다.

반대의 경우 Ctrl 키를 누른 상태에서 표시 할 창으로 끌면 Popoverwindow에서 비헤이비어를 제어 할 수 없습니다.

(중요한 부분은 LavaSlider의 답글의 마지막 문장에도 있습니다)

관련 문제