2012-01-06 6 views
1

インフォボタンが押されたときに作成されたmodalViewControllerビューを表示するメインウィンドウが必要です。しかし、メインウィンドウのInfoボタンを押すと何も起こりません。 mainviewcontroller.mファイルでUIToolbarでプログラムボタンを押したときにInfoボタンのModalviewControllerを表示する

#import <UIKit/UIKit.h> 
#import <AVFoundation/AVFoundation.h> 

@interface imageviewViewController : UIViewController{ 
AVAudioPlayer *audioPlayer; 
} 

@property (nonatomic, retain) UIToolbar *toolbar; 
@property (nonatomic, assign) UIBarButtonSystemItem currentSystemItem; 
@property (nonatomic, retain) AVAudioPlayer *audioPlayer; 

@end 

は、コードを次ています:

:Infoviewcontroller.hファイルで

#import "imageviewViewController.h" 
#import "Infoviewcontroller.h" 


@implementation imageviewViewController 

@synthesize toolbar; 
@synthesize currentSystemItem; 
@synthesize audioPlayer; 

UIBarButtonItem *infoItem = [[UIBarButtonItem alloc] 
          initWithTitle:@"Info" 
          style:UIBarButtonItemStyleBordered 
          target:nil 
          action:@selector(Infobuttonpressed)]; 

    // flex item used to put space in between buttons 

    UIBarButtonItem *flexItem = [[UIBarButtonItem alloc] 
          initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace 
          target:nil 
          action:nil]; 

    //Add buttons to the array 

    NSArray *toolbarItems = [NSArray arrayWithObjects: settingsButton, flexItem, systemItem, flexItem, systemItem1,flexItem, systemItem2, flexItem, systemItem3, flexItem, infoItem, nil]; 

    [toolbar setItems:toolbarItems]; 

    [settingsButton release]; 
    [systemItem release]; 
    [systemItem1 release]; 
    [systemItem2 release]; 
    [systemItem3 release]; 
    [infoItem release]; 
    [flexItem release]; 

[super viewDidLoad]; 

} 


- (void) Infobuttonpressed: (id) sender 
{ 
Infoviewcontroller *myView = [[Infoviewcontroller alloc] init]; 
[self presentModalViewController:myView animated:YES]; // present view modally 
[self.navigationController pushViewController:myView animated:YES]; // add to navigation stack 
[myView release]; 
} 

は、コードを次している私は、コードを次しているmainviewcontroller.hファイルで

#import <UIKit/UIKit.h> 

@interface Infoviewcontroller : UIViewController <UITextViewDelegate> 

{ 

UITextView *textView; 

} 

@property (nonatomic, retain) UITextView *textView; 
@property (nonatomic, assign) UINavigationBar *navBar; 


@end 

次に、infoviewcontroller.mファイルに次のコードがあります。

#import "Infoviewcontroller.h" 

@implementation Infoviewcontroller 

@synthesize textView; 
@synthesize navBar; 



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

-(void)setupTextView 
    { 
self.textView = [[[UITextView alloc] initWithFrame:self.view.frame] autorelease]; 

self.textView.textColor = [UIColor redColor]; 

self.textView.font = [UIFont fontWithName:@"System Bold" size:13]; 

self.textView.delegate = self; 

self.textView.backgroundColor = [UIColor whiteColor]; 

self.textView.textAlignment = UITextAlignmentCenter; 

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

[self.view addSubview: self.textView];  

} 

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 

navBar = [[UINavigationBar alloc] init]; 
UINavigationItem *navItem = [[[UINavigationItem alloc] initWithTitle:@"ModalViewControllerTest"] autorelease]; 
UIBarButtonItem *done = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(dismissView:)] autorelease]; 
navItem.rightBarButtonItem = done; 
navBar.items = [NSArray arrayWithObject:navItem]; 
[self.view addSubview:navBar]; 
} 
+0

info viewコントローラにnibファイルがありますか、それともコード内にすべてビルドしていますか? – jrturton

+0

私はそれをプログラマティックに行っています – user1120133

+0

そしてブレークポイントを使ってどのくらい離れているか確認しましたか?アクションメソッドが実行されているか、コントローラ内のどのメソッドが実行されていますか? – jrturton

答えて

1
UIBarButtonItem *infoItem = [[UIBarButtonItem alloc] 
          initWithTitle:@"Info" 
          style:UIBarButtonItemStyleBordered 
          target:nil 
          action:@selector(Infobuttonpressed)]; 

UIBarButtonItem *infoItem = [[UIBarButtonItem alloc] 
          initWithTitle:@"Info" 
          style:UIBarButtonItemStyleBordered 
          target:self 
          action:@selector(Infobuttonpressed:)]; 

は違いを見抜くべきか?まず、ターゲットがありません(selfnilではないはずです)。第2に、セレクタの最後にあるコロンが署名の一部であるため、あなたはそれを見逃していたので、あなたのメソッド(つまりInfoButtonPressed:(id)sender)を呼び出していませんでした。

脇に、メソッドは小文字の名前で始まる必要があります。

0

あなたはpushModalViewControllerとpushViewController

あなたのビューがすでに動作する独自にUINavigationController pushModalViewControllerのインスタンス内で制御されていると仮定すると、

の両方が必要いけません。

edit - pushViewControllerへの参照を削除します。それは今働きますか?

-(void) Infobuttonpressed: (id) sender; 
{ Infoviewcontroller *myView = [[Infoviewcontroller alloc] init]; 
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:myView]; 
UIViewController *pushController = [[UIViewController alloc] init]; 
[self addSubview:pushController.view]; 
[pushController presentModalViewController:navController animated:YES]; 
[myView release]; 
} 
+0

私はあなたを取得していません。もっと詳しく説明できるのであれば。私はそれを感謝します。しかし、助けをありがとう。 – user1120133

+0

ご協力ありがとうございます。しかし、まだpushviewcontrollerの文章を削除した後、まだ仕事をしませんでした。 – user1120133

+0

ええ、presentModalラインなしでナビゲーションコントローラにビューをプッシュするだけでうまくいきますか? –

0

infoItemのターゲットがnilに設定されています。 Infobuttonpressedが定義されているクラスのインスタンスに設定する必要があります。私はそれがmainviewControllerだと思いますか?

また、コールするセレクタは@selector(Infobuttonpressed)として指定され、メソッドは "Infobuttonpressed:"と呼ばれ、パラメータを使用します。ターゲットを修正すると、ランタイムエラーが発生する可能性があります。

次に、あなたが物事を扱う方法にいくつかの特殊性があります。 Nikが既に答えたように、ビューをモーダルにpresentModalViewControllerで表示するか、ナビゲーションスタックの一部としてpushViewControllerで表示するかを選択する必要があります。両方を行うことはできません。

ナビゲーションスタックの一部として表示すると、すでにナビゲーションバーが表示されているので、自分で追加することはできません。 self.navigationItemのプロパティを設定するだけです。

詳細はView Controller Programming Guideをご覧ください。

関連する問題