0

私はiPhone開発者の初心者ですが、

アプリケーションに4ページがあります。アプリケーションはviewBasedApplicationです。

最初のページ( LicAppViewController)を としてRootViewController作成しました。これが私のコードです。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; 
    self.viewController = [[[LicAppViewController alloc] initWithNibName:@"LicAppViewController" bundle:nil] autorelease]; 

    UINavigationController *navigationController=[[UINavigationController alloc] initWithRootViewController:self.viewController];
    [self.window addSubview:navigationController.view];
    [self.window makeKeyAndVisible];
    return YES; 
}

ボタンをクリックすると、2ページ目に移動します( PlanPage)

-(void)btnClicked{

    PlanPage *viewController = [[PlanPage alloc]initWithNibName:@"PlanPage" bundle:nil];
    [UIView beginAnimations:@"Flip" context:nil]; 
    [UIView setAnimationDuration:0.7]; 
    [UIView setAnimationCurve:UIViewAnimationOptionCurveEaseInOut]; 
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.navigationController.view cache:NO]; 
    [self.navigationController pushViewController:viewController animated:YES];
    [UIView commitAnimations];
    [viewController release];

}

今までは問題なく動作していましたが、2 ページ目の行を選択するとアプリケーションがクラッシュし、3 ページ目 ( DetailPlanPage) に移動したいのですが、これが私のコードです

    DetailPlanPage *nextController = [[DetailPlanPage alloc] initWithNibName:@"DetailPlanPage" bundle:nil];
    [self.navigationController presentModalViewController:nextController animated:TRUE];

しかし、私が書くとき、この行:

      [self.navigationController pushViewController:nextController animated:YES];

それ以外の:

       [self.navigationController presentModalViewController:nextController animated:TRUE];

それはうまくいっています。(よくわかりませんが、アプリケーションのクラッシュは viewBased Application が原因である可能性があります)

前もって感謝します !

4

3 に答える 3

1

ルートビューコントローラを最初に設定する

そのコードを削除します

[self.window addSubview:navigationController.view];

含める

self.window.rootViewController = navigationController;

現在のモーダルビューコントローラーでは、uはこのように試すことができます

    yourview *detailViewController = [[yourview alloc] initWithNibName:@"yourview" bundle:nil];
         UIBarButtonItem *doneButton = [[UIBarButtonItem alloc ] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(dismiss)];
     detailViewController.navigationItem.leftBarButtonItem = doneButton;
        UINavigationController *nav;
        nav=[[[UINavigationController alloc] initWithRootViewController:detailViewController] autorelease];
        [self presentModalViewController:nav animated:YES];
        [detailViewController release];
[doneButton release];

-(void) dismiss
{
      [self dismissModalViewControllerAnimated:YES];
  }
于 2012-06-20T07:21:55.963 に答える
1

試す

[self presentModalViewController:nextController animated:YES];

また、nextController のデリゲートを self に設定し、デリゲート関数を追加して Modal View Controller を閉じることもできます。

于 2012-06-20T06:24:44.000 に答える
0

最も重要な違いはセマンティクスに関するものです。モーダル ビュー コントローラーは通常、ユーザーが何らかの情報を提供するか、何らかの操作を行う必要があることを示します。このリンクでは、さらに詳しく説明しています。

http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/ModalViewControllers/ModalViewControllers.html

モーダル ビュー コントローラーを提示すると、提示したビュー コントローラーと提示されたビュー コントローラーの間に親子関係が作成されます。具体的には、提示を行ったビュー コントローラーは、 modalViewController プロパティを更新して、提示された (子) ビュー コントローラーを指すようにします。同様に、提示されたView Controllerは、それを提示したView Controllerを指すようにparentViewControllerプロパティを更新します。また、別のリンク.

于 2012-06-20T06:26:07.823 に答える