2012-07-01 11 views
11

내 코드는 다음과 같습니다. 여는 rootviewController에 뒤로 버튼을 넣고 싶습니다. 은 UINavigationController에서 뒤로 버튼의UINavigationController의 RootViewController에 다시 버튼을 표시하는 방법은 무엇입니까?

- (void)selectSurah:(id)sender { 

    SurahTableViewController * surahTableViewController = [[SurahTableViewController alloc] initWithNibName:@"SurahTableViewController" bundle:nil]; 
    [email protected]"Surah"; 

    s[email protected]"Back"; 

    UINavigationController *aNavigationController = [[UINavigationController alloc] initWithRootViewController:surahTableViewController]; 

    [self presentModalViewController:aNavigationController animated:YES]; 
} 
+0

어디로 가야합니까? – jarryd

+2

대답은 분명합니다. presentModalViewController가 호출 된 곳으로 되돌아갑니다. 아래 @Flex_Addicted answer를 참조하십시오. – shaikh

답변

8

나는 그것을 탐색 스택에서 루트 뷰 컨트롤러를 팝업하는 것이 가능하다 생각하지 않습니다,하지만 당신은 할 수 가짜 그것을 UIButtonUIBarButtonItem의 사용자 정의보기로 추가로 :의

UIButton *b = [[UIButton alloc]initWithButtonType:UIButtonTypeCustom]; 
[b setImage:[UIImage imageNamed:@"BackImage.png"] forState:UIControlStateNormal]; 
[b addTarget:self action:@selector(back:) forControlEvents:UIControlEventTouchUpInside]; 
self.leftBarButtonItem = [[UIBarButtonItem alloc]initWithCustomView:b]; 

적합한 PSD iOS UI 요소는 here입니다.

+0

PSD 링크에 감사드립니다. – shaikh

2

모양 및 동작 UINavigationControllers의 스택 사이의 상호 작용에 의존한다. 첫 번째 컨트롤러에 뒤로 버튼을 배치하면이 규칙이 적용되지 않으므로 다시 돌아갈 수는 없습니다. 따라서 코드가 작동하지 않습니다.

수동으로 같은 제목 표시 줄의 코드에 UIBarButtonItem을 추가해야합니다

: 수동 이미지로 UIBarButtonItem을 만들어야합니다 당신이 진정 그것이 뒤로 가기 버튼처럼 보이게하려는 경우

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:self action:@selector(back:)]; 

다시 버튼을 반영합니다.

또 다른 제안은 모달보기 컨트롤러를 닫는 데 뒤로 버튼을 사용하려는 것처럼 보입니다. 모달보기를 닫으려면 '닫기'또는 '완료'버튼과 같은 더 일반적인 방법을 사용해야합니다. 제어 장치. UINavigationController 스택을 탐색하는 데는 뒤로 버튼이 더 적합합니다.

+1

+1 또는 '완료'또는 '완료'라벨 제안. 감사합니다 – shaikh

4

네비게이션 컨트롤러의 SurahTableViewController은 루트보기 컨트롤러이므로 이미 이미 있으므로 루트로 돌아갈 수 없습니다. 당신이 뭔가에서 모달을 발표 한 이후, 당신은 호출하는 IBAction이있는 탐색 모음에 버튼을 넣어해야합니다

[self dismissModalViewControllerAnimated:YES]; 
5

Faizan,

Helium3 댓글이 의미가 있습니다.

모달로 표시된 컨트롤러를 닫으려면 단추가 필요하다고 가정합니다. 사실입니까? 내가 틀렸다면 고쳐주세요.

그렇다면 UIBarButtonItem을 새로 만들고 UINavigationControllernavigationItem의 왼쪽 (또는 오른쪽) 버튼으로 설정할 수 있습니다. 캡슐화를 중단하지 않으려면 SurahTableViewController 컨트롤러의 viewDidLoad 메소드에서 생성하십시오.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    // make attention to memory leak if you don't use ARC!!! 
    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Close" 
      style:UIBarButtonItemStyleBordered 
      target:self 
      action:@selector(close:)]; 
} 

-(void)close:(id)sender 
{ 
    // to dismiss use dismissViewControllerAnimated:(BOOL)flag completion:(void (^)(void))completion 
    // dismissModalViewControllerAnimated: is deprecated 

    [self dismissViewControllerAnimated:YES completion:^{ NSLog(@"controller dismissed"); }]; 
} 
+0

그게 완벽한 해답입니다. 슈퍼 훌륭한 작품. – shaikh

+0

죽은 (스레드),하지만 단지 메모를 부활에 대한 죄송합니다 : UINavigationController 자체가 아닌 UINavigationController에서 제시되는 UIViewController에 버튼을 추가해야합니다! 이것은 1 시간 정도를 낭비했다 : ( – MacD

+0

@MadD 지연에 대해 유감이 무엇입니까? 네비게이션 바에 버튼이 붙어 있습니다. 왜 그게 효과가 없습니까? 미리 감사드립니다. –

관련 문제