Red > Green > Refactor > Red

cycle is based on desire

presentViewController を使って値を受け渡す(渡される)

結果イメージ

f:id:mat5ukawa:20150517211706j:plain

  • テキストフィールドに @"out me" を入力
  • Send ボタンを押下する
  • 別画面が開いて @"out me" が表示される

前提

  • Storyboad, Segue は使わない
  • Xcode 6.3.1
  • iOS 8.3

登場人物

  • InputViewController(.xib | .h | .m) (値を受け渡す ViewController)
  • OutputViewController(.xib | .h | .m) (値を受け渡される ViewController)
  • (他立役者は、各項目のソースを参照)

結果へ辿り着くまで

InputViewController(.xib | .h | .m) (値を受け渡す ViewController)

xib

f:id:mat5ukawa:20150517211724p:plain

h

#import <UIKit/UIKit.h>

@interface InputViewController : UIViewController
@end

m

#import “InputViewController.h"
// 値の受け渡し先 ViewController を import する
#import “OutputViewController.h"

@interface InputViewController ()
// 値を受け渡したい UI プロパティの宣言(アウトレット接続)
@property (weak, nonatomic) IBOutlet UITextField *inputTextField;
@end

@implementation InputViewController
- (void)viewDidLoad {
  [super viewDidLoad];
  self.inputTextField.text = @"";
}

- (void)didReceiveMemoryWarning {
  [super didReceiveMemoryWarning];
}

- (IBAction)touchSendButton:(UIButton *)sender {
  // 1. presentViewController で表示する ViewController を alloc, init
  // 2. 受け渡したい値を
  //    受け渡され先 ViewController の公開プロパティに割り当てる
  // 3. presentViewController する
  OutputViewController *outputVC = [[OutputViewController alloc] init];
  outputVC.output = self.inputTextField.text;
  [self presentViewController:outputVC animated:YES completion:nil];
}
@end

OutputViewController(.xib | .h | .m) (値を受け渡される ViewController)

xib

f:id:mat5ukawa:20150517211828p:plain

h

#import <UIKit/UIKit.h>

@interface OutputViewController : UIViewController
// 値受け渡しをするプロパティは公開宣言する
@property (nonatomic) NSString *output;
@end

m

#import "OutputViewController.h"

@interface OutputViewController ()
// 受け渡された値を割り当てる UI プロパティの宣言(アウトレット接続)
@property (weak, nonatomic) IBOutlet UILabel *outputLabel;
@end

@implementation OutputViewController
- (void)viewDidLoad {
  [super viewDidLoad];
  // 受け渡された値を UILabel へ割り当てる
  self.outputLabel.text = self.output;
}

- (void)didReceiveMemoryWarning {
  [super didReceiveMemoryWarning];
}
@end

reference

oleb.net