2012-01-20 21 views
1

mainviewcontrollerがあり、その上にUIViewControllerをモーダルに示すUIBarButtonItem Infoを持つUIToolbarがあります。NavigationControllerがモーダル表示のUIViewControllerに表示されない

Infoputtonを押すとUITextViewを持つUIViewControllerがモーダルに表示されますが、Doneボタン付きのUINavigationControllerは表示されません。

私のコードには何がないのか分かりません。

これは、UIViewControllerでUITextViewとNavigationControllerをモーダルで表示する方法です。

#import "ModalViewController.h" 
#import <QuartzCore/QuartzCore.h> 

@implementation ModalViewController 

@synthesize textView; 
@synthesize navBar; 
@synthesize navigationController; 
@synthesize delegate; 

-(void)dealloc 
{ 
    [textView release]; 
[navBar release]; 
[navigationController release]; 
[super dealloc]; 
} 

- (void) viewDidLoad 
{ 
    [super viewDidLoad]; 

self.title = @"Info"; 

UINavigationController *navigationController = [[UINavigationController alloc]init]; 
               //initWithRootViewController:viewController]; 

self.navigationController.navigationBar.tintColor = [UIColor brownColor]; 

self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(Done:)] autorelease]; 

self.textView = [[[UITextView alloc] initWithFrame:CGRectMake(0, 0, 320, 416)]autorelease]; 

self.textView.textColor = [UIColor whiteColor]; 

self.textView.font = [UIFont fontWithName:@"Georgia-BoldItalic" size:14]; 

//self.textView.delegate = self; 

self.textView.backgroundColor = [UIColor brownColor]; 

self.textView.layer.borderWidth = 1; 

self.textView.layer.borderColor = [[UIColor whiteColor] CGColor]; 

self.textView.layer.cornerRadius = 1; 

self.textView.textAlignment = UITextAlignmentCenter; 

self.textView.text = @"This is UITextView presenting modally.\nThis is UITextView presenting modally.\nThis is UITextView presenting modally.\nThis is UITextView presenting modally.\nThis is UITextView presenting modally.\nThis is UITextView presenting modally. 

self.textView.editable = NO; 

//[self.view addSubview:navigationController.view]; 

[self.view addSubview: self.textView]; 

//[navigationController release]; 

}

そして、これはのUIViewControllerはモーダル

//Create a final modal view controller 

    UIButton *modalViewButton = [UIButton buttonWithType:UIButtonTypeInfoLight]; 

    [modalViewButton addTarget:self action:@selector(modalViewAction:) forControlEvents:UIControlEventTouchUpInside]; 

    UIBarButtonItem *modalBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:modalViewButton]; 

    self.navigationItem.rightBarButtonItem = modalBarButtonItem; 

- (void) modalViewAction:(id)sender 

{ 
    self.view = [[[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]]autorelease]; 

//self.viewController = [[ModalViewController alloc] init]; 

[self.view setFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; 


//ModalViewController *myModalViewController = [[ModalViewController alloc] init]; 

    //UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:myModalViewController]; 

    //navigationController.navigationBar.tintColor = [UIColor brownColor]; 

    _viewController = [[ModalViewController alloc] init]; 

    //[navigationController pushViewController:_viewController animated:YES]; 

    [self presentModalViewController:self.viewController animated:YES]; 

    //[self.view addSubview:navigationController.view]; 

    //[navigationController release]; 



    [myModalViewController release]; 

} 

あなたは私が間違っているのか、私のコードで行方不明mのかを把握することができます場合、私は理解するだろうが提示する方法です。

ありがとうございます。

答えて

1

これは、新しいコントローラを不必要に複雑に表示する方法のようです。私のアプリケーションでは、私はこのようにそれを行う:今、あなたは、グラフィカルセットアップ(ナビゲーションバーの色などを)やりたいからNavController

- (void) showModalController 
{ 
    YourViewController * ecreator = [[YourViewController alloc] initWithNibName:@"YourViewController" bundle:nil]; 

    UINavigationController * navcontrol = [[UINavigationController alloc] initWithRootViewController: ecreator]; 

    [self presentModalViewController: navcontrol animated:YES]; 
    [navcontrol release]; 
    [ecreator release]; 
} 

内にネスト

//この関数を表示(モーダル)ビューコントローラinitWithNibおよび/またはviewDidLoadYourViewControllerの機能。

+0

私はプログラム的に扱っています。 – user1120133

1
@synthesize navigationController; 

したがって、navigationControllerは、クラスメンバー変数です。関数内

- (void) viewDidLoad 

ローカル変数

UINavigationController *navigationController 

を宣言二navigationControllerがあなたのメンバ変数navigationController異なっていることに注意してください。

したがって、viewDidLoadの内部には、メンバー変数navigationControllerのオブジェクトを作成する必要があります。ローカル変数navigationControllerではありません。

navigationControllerviewDidLoadに再宣言しないでください。代わりに、次のようなメンバ変数を使用してオブジェクトを作成します。

navigationController = [[UINavigationController alloc]init]; 
+0

あなたはどのように私はvieweDidLoadのコードでメンバ変数のオブジェクトを作成することができます私を見せてくださいできますか? – user1120133

+0

私はMACを私に持っていません。しかし、それは私が上記のようにすべきです。あなたは別のinitメソッドを使用する必要があるかもしれません。 – haberdar

0

これを試してみてください。私はまったく同じ問題を抱えていた

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if([segue.identifier isEqualToString:@“segue_name"]) 
    { 
     UINavigationController *nav = [segue destinationViewController]; 
     ExampleViewController *exampleVC = (ExampleViewController *) nav.topViewController; 

     //Setup any properties here and segue 
    } 
} 
関連する問題