2013-02-18 3 views
12
SettingsViewController *viewController = [[SettingsViewController alloc] init]; 
    [[self navigationController] pushViewController:viewController animated:YES]; 

이 코드를 NavigationController에서 사용할 때 나타나는 장면은 검은 색 화면입니다. 스토리 보드에서는 콘텐츠를 표시하지만 휴대 전화에는 표시되지 않습니다.PushViewController가 검은 색 화면으로 연결됩니다.

+0

사용하지 않는 경우주의하시기 바랍니다 ARC 그러면 viewController가 누출됩니다. –

+0

'animated : NO'라고 말하십시오. (같은 문제에 직면 해 iOS 7에서만.) –

답변

1

사용이 :

SettingsViewController *viewController = [[SettingsViewController alloc] initWithNibName:@"SettingsViewController" bundle:[NSBundle mainBundle]]; 
[[self navigationController] pushViewController:viewController animated:YES]; 
18

이 시도 :

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle: nil]; 
SettingsViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"setting"]; 
[self.navigationController pushViewController:viewController animated:YES]; 

이 settingviewcontroller의 식별자를 설정

내가이 문제를 해결이

SettingsViewController *viewController = [[SettingsViewController alloc]initWithNibName:@"SettingsViewController" bundle:[NSBundle mainBundle]]; 
    [self.navigationController pushViewController:viewController animated:YES]; 
+5

하드 코딩 된 이름을 사용하여 스토리 보드를 얻는 대신 navController가 제공 한 스토리 보드를 'self.navigationController.storyboard'를 사용하여 가져 와서 첫 번째 줄을 제거 할 수 있습니다. – JohnQ

+0

ok .. 좋은 제안에 감사드립니다. 우리는 또한 이것을 위해 self.view.storyboard를 사용할 수 있습니다 .. 해피 코딩 :) – shivam

+0

self.navigationController.storyboard는 내 경우 신속하게 문제를 일으켰습니다. – zaheer

0

을 "설정" 사용자 정의 초기화 f 대상보기 컨트롤러.

목적지보기 컨트롤러 :

-(id) initWithSender:(UINavigationController*)sender 
{ 
     self=[sender.storyboard instantiateViewControllerWithIdentifier:@"DestinationVCIdentifier"]; 
    if (self) { 
     //custom initialisation 
    } 
    return self; 
} 

그리고 그것을 사용 :

DestinationVC *viewController = [[SettingsViewController alloc] initWithSender:self.navigationController]; 
[[self navigationController] pushViewController:viewController animated:YES]; 
0

을 시도

+0

initWithSender 메소드가 존재하지 않습니다. – Dejan

+0

@Dejan 예,보기 컨트롤러에 추가하지 않은 경우 – svvoff

1

하여 스토리 보드로 인스턴스화되어 그것을 할 수있는 쉬운 방법. 당신은 당신의 ViewController에게 스토리 보드 ID를 제공 한 후 다음 코드를 사용합니다 :이 밀어 간단하게 이루어집니다

YourView *view = [self.storyboard instantiateViewControllerWithIdentifier:@"YourViewID"]; 

:이 도움이

[[self navigationController] pushViewController:view animated:YES]; 

희망을.

0

안녕 상단 컨트롤러 (내비게이션 바)를 으로 설정하고보기 컨트롤러에 대해을 추정해야합니다. 내 경우 이전에 상단 막대를 "반투명 탐색 모음"으로 설정했습니다.

일반적으로 모달보기 컨트롤러에서 segue를 수행합니다.

0

그래서 xib 또는 스토리 보드의 이름을 사용하여 모든 사람이 제안하고 유효하다고 초기화 할 수 있습니다.

스토리 보드를 사용하여 초기의 ViewController 스토리 보드에있는 경우, 그들은 어쩌면 오히려 다음을 수행하지만

, 그리고

// Method in your initial viewcontroller 
- (void)youPushMethod { 

// Name your segue on your storyboard, e.g. SegueIndentifier 
[self performSegueWithIdentifier:@"SegueIndentifier" sender:self]; 
} 

,

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 

    if ([segue.identifier isEqualToString:@“SegueIndentifier"]) { 
    SettingsViewController *settingsViewController= segue.destinationViewController; 
    } 
} 
관련 문제