2013年8月5日月曜日

NavigationControllerで画面遷移(2)

前回の続き。遷移先の画面に値を渡してみます。前回制作したものをベースに作成します。

まずは以前TableViewControllerのときと同様に追加したViewControllerにClassを追加します。




 そして、segueの矢印のアイコンをクリックして[Segue Identifier]の名前を設定します。

ここで、値を渡すための準備をします。遷移先にプロパティを設定します。

//ここでは、NSString型のrecieveを宣言しています。
@interface ResultViewController : UIViewController
{
    NSString *recieve;
}
@property NSString *recieve;
//ついでにLabelを設定します。
@property (weak, nonatomic) IBOutlet UILabel *resultLabel;
 
ソースファイルの方には

- (void)viewDidLoad
{
    [super viewDidLoad];
 // Do any additional setup after loading the view.
    //言うまでもなくLabelにプロパティの値を渡しています。
    _resultLabel.text = _recieve;
}

 
そして、遷移元のClassで値を渡す準備をします。まずはヘッダーファイルに

#import "ResultViewController.h"(遷移先のヘッダーファイル名)

を書いて、遷移先のClassをインポートします。
そして、ソースファイルに値の遷移をするメソッドを記述します。

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    //seugeを特定するため、Segue Idetifierを特定します。複数のsegueを特定するのに必要です。
    if ([[segue identifier]isEqualToString:@"btnPush"])
    {
        //遷移先のClassのViewを作成し、先ほど記述したプロパティに値を渡します。
        ResultViewController *resultviewcontroller = [segue destinationViewController];
        resultviewcontroller.recieve = _text.text;
    }
    
}

[おまけ]
UITextFieldからキーボードを出すとデフォルトでは、Safariの検索のとこみたいに引っ込んだりしません、なので引っ込むようにします。
そのためには、デリゲート(委託)メソッドを使用して、UITextFieldの処理をこちら側で設定します。
デリゲートの設定はこんな感じ。
ヘッダーファイル

//UIViewControllerの後ろに<UITextFieldDelegate>を追加
@interface ViewController : UIViewController <UITextFieldDelegate>

ソースファイル

- (void)viewDidLoad
{
    [super viewDidLoad];
    //TextFieldのデリゲートを設定します。
    _text.delegate =self;
}


//returnキーが押されたときの処理を指定するメソッドです。
-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
    //キーボードを隠すメソッドを実行します。
    [textField resignFirstResponder];
    return YES;
}


これで完成。入力した文字を遷移先のビューで表示するアプリです。

1 件のコメント:

  1. はじめまして!無料でアプリを簡単に作成できるツールを公開中です。
    よかったらぜひお試しください(^^)
    また遊びにきます!アプリ&ブログ頑張ってくださーい。
    クールアプリ(http://www.coolapp.jp)

    返信削除