iphoneでの画面遷移方法について
Posted: 2010年10月03日(日) 23:56
はじめまして。初めての投稿になります。最近iphoneの開発を始めたのですが、どうしても画面遷移方法がわからず、悶々としております。
基本的なこととは思いますが、ご教授頂きたくお願いします。
【やりたいこと】
・View-based Applicationで作成し、複数Viewを用意して、各View上にボタンを配置し、
単純にViewを切り替える(画面遷移)。
【どこまで実装できたか】
・とあるサイトのサンプルソースを参考+自力にて以下まで作成。
画面1(View1)がアプリ起動後表示され、画面1上のボタンを押下すると
画面2(View2)に切り替わる。
画面2上にもボタン(戻る)を作成し、このボタンを押下すると
画面1に戻る。
【困っている事】
上記実装までいったのですが、また、画面1から画面2に遷移させる方法がわからない。
そもそもの考え方が間違っているのかがわからない。
一旦、考えてみたが、ビルドーエラー5個発生。
※次項目が具体的な内容です。
【具体的な内容】
画面1上のボタンを押下時のアクション関数の内容 (nextPage())
- (IBAction)nextPage:(id)sender {
//画面2のxibを読み込んで、画面2のView、ViewControllerを作成
Seni2ViewController *nextViewController=[[Seni2ViewController alloc]initWithNibName:@"Seni2ViewController" bundle:[NSBundle mainBundle]];
//画面2のクラスに画面1のViewを保持しておく。。。このサンプルコードを見た時は、戻る時にこのViewを使うのだと認識。。A
nextViewController.parentController=self;
//画面2を表示(切替える)
[self presentModalViewController:nextViewController animated:YES];
[nextViewController release];
}
このアクションで画面1→画面2はOK
そして、画面2→画面1時、画面2上のボタン押下時のアクション関数は以下。(bakPage())
- (IBAction)backPage:(id)sender {
//nextPage()関数にて、画面1のViewは、parentControllerに格納されていたので(上記A)、この変数を使って表示を切替えた。
[self presentModalViewController:parentController animated:YES];
}
このアクションで、画面2→画面1はOK
さて、また、画面1→画面2に行きたい。nextPage()を呼ぶ!
そうすると、落ちる。これは、再度、画面2のxibを呼ぶことにより、なんかおかしくなるんだろうと想像。
ならば、フラグ制御して、いろいろ調べてみよう。。。と nextPage()関数を以下に改造。
- (IBAction)nextPage:(id)sender {
//姑息な手段でフラグ制御 goFlag=0の時、最初なので、xibにて画面2を作成。
if(goFlag==0) {
Seni2ViewController *nextViewController=[[Seni2ViewController alloc]initWithNibName:@"Seni2ViewController" bundle:[NSBundle mainBundle]];
nextViewController.parentController=self;
//次回画面2に行くために画面2のViewを保持しておこう。 B
(Seni2ViewController*)childController=nextViewController;
[self presentModalViewController:nextViewController animated:YES];
[nextViewController release];
goFlag=1;
}
else {
//この処理は、goFlag=1で、2回目以上の時だから、上記Bの変数を使って画面2のViewを切り替える想定。
[self presentModalViewController:(Seni2ViewController*)childController animated:YES];
}
}
【困っている事】にも書きましたが、そもそも画面遷移ってこういう考えで実装するのでしょうか。
また、ビルドエラー(5個)は、次のエラー(←の部分)ですが、何がいけないのかがわかりません。。。
※実際は、ボタン、アクション関数などを定義していますが、省略しています。
<画面1分>
#import <UIKit/UIKit.h>
#import "Seni2ViewController.h"
@interface SeniViewController : UIViewController {
Seni2ViewController *childController; ←エラー:Expected specifier-qualifier-list before SeniViewController
}
@property (nonatomic,retain) Seni2ViewController *childController;
↑エラー:Expected specifier-qualifier-list before SeniViewController
@end
<画面2分>
#import <UIKit/UIKit.h>
#import "SeniViewController.h"
@interface Seni2ViewController : UIViewController {
SeniViewController *parentController; ←エラー:Expected specifier-qualifier-list before SeniViewController
}
@property (nonatomic,retain) SeniViewController *parentController;
↑エラー:Expected specifier-qualifier-list before SeniViewController
@end
あと、goPage()のアクション関数にもエラー
(IBAction)nextPage:(id)sender {
:
(省略)
nextViewController.parentController=self; ←Request for member 'parentController' in something not a structure or union
:
(省略)
}
※parentController およびchildController の@synthesize定義はしています
長々と申し訳ありません。何かきっかけを頂ければ幸いです。
よろしくお願いいたします。
※インデントがバラバラ表示で見にくく、申し訳ありません。
基本的なこととは思いますが、ご教授頂きたくお願いします。
【やりたいこと】
・View-based Applicationで作成し、複数Viewを用意して、各View上にボタンを配置し、
単純にViewを切り替える(画面遷移)。
【どこまで実装できたか】
・とあるサイトのサンプルソースを参考+自力にて以下まで作成。
画面1(View1)がアプリ起動後表示され、画面1上のボタンを押下すると
画面2(View2)に切り替わる。
画面2上にもボタン(戻る)を作成し、このボタンを押下すると
画面1に戻る。
【困っている事】
上記実装までいったのですが、また、画面1から画面2に遷移させる方法がわからない。
そもそもの考え方が間違っているのかがわからない。
一旦、考えてみたが、ビルドーエラー5個発生。
※次項目が具体的な内容です。
【具体的な内容】
画面1上のボタンを押下時のアクション関数の内容 (nextPage())
- (IBAction)nextPage:(id)sender {
//画面2のxibを読み込んで、画面2のView、ViewControllerを作成
Seni2ViewController *nextViewController=[[Seni2ViewController alloc]initWithNibName:@"Seni2ViewController" bundle:[NSBundle mainBundle]];
//画面2のクラスに画面1のViewを保持しておく。。。このサンプルコードを見た時は、戻る時にこのViewを使うのだと認識。。A
nextViewController.parentController=self;
//画面2を表示(切替える)
[self presentModalViewController:nextViewController animated:YES];
[nextViewController release];
}
このアクションで画面1→画面2はOK
そして、画面2→画面1時、画面2上のボタン押下時のアクション関数は以下。(bakPage())
- (IBAction)backPage:(id)sender {
//nextPage()関数にて、画面1のViewは、parentControllerに格納されていたので(上記A)、この変数を使って表示を切替えた。
[self presentModalViewController:parentController animated:YES];
}
このアクションで、画面2→画面1はOK
さて、また、画面1→画面2に行きたい。nextPage()を呼ぶ!
そうすると、落ちる。これは、再度、画面2のxibを呼ぶことにより、なんかおかしくなるんだろうと想像。
ならば、フラグ制御して、いろいろ調べてみよう。。。と nextPage()関数を以下に改造。
- (IBAction)nextPage:(id)sender {
//姑息な手段でフラグ制御 goFlag=0の時、最初なので、xibにて画面2を作成。
if(goFlag==0) {
Seni2ViewController *nextViewController=[[Seni2ViewController alloc]initWithNibName:@"Seni2ViewController" bundle:[NSBundle mainBundle]];
nextViewController.parentController=self;
//次回画面2に行くために画面2のViewを保持しておこう。 B
(Seni2ViewController*)childController=nextViewController;
[self presentModalViewController:nextViewController animated:YES];
[nextViewController release];
goFlag=1;
}
else {
//この処理は、goFlag=1で、2回目以上の時だから、上記Bの変数を使って画面2のViewを切り替える想定。
[self presentModalViewController:(Seni2ViewController*)childController animated:YES];
}
}
【困っている事】にも書きましたが、そもそも画面遷移ってこういう考えで実装するのでしょうか。
また、ビルドエラー(5個)は、次のエラー(←の部分)ですが、何がいけないのかがわかりません。。。
※実際は、ボタン、アクション関数などを定義していますが、省略しています。
<画面1分>
#import <UIKit/UIKit.h>
#import "Seni2ViewController.h"
@interface SeniViewController : UIViewController {
Seni2ViewController *childController; ←エラー:Expected specifier-qualifier-list before SeniViewController
}
@property (nonatomic,retain) Seni2ViewController *childController;
↑エラー:Expected specifier-qualifier-list before SeniViewController
@end
<画面2分>
#import <UIKit/UIKit.h>
#import "SeniViewController.h"
@interface Seni2ViewController : UIViewController {
SeniViewController *parentController; ←エラー:Expected specifier-qualifier-list before SeniViewController
}
@property (nonatomic,retain) SeniViewController *parentController;
↑エラー:Expected specifier-qualifier-list before SeniViewController
@end
あと、goPage()のアクション関数にもエラー
(IBAction)nextPage:(id)sender {
:
(省略)
nextViewController.parentController=self; ←Request for member 'parentController' in something not a structure or union
:
(省略)
}
※parentController およびchildController の@synthesize定義はしています
長々と申し訳ありません。何かきっかけを頂ければ幸いです。
よろしくお願いいたします。
※インデントがバラバラ表示で見にくく、申し訳ありません。