Swiftで遊ぼう! on Hatena

あしたさぬきblogでやってた初心者オヤジのiOSプログラミング奮闘記がHatenaに来ました

Swiftで遊ぼう! - 702 - Multithreading and Text Field 6

セグエをターゲット・アクションに切り替えてみる。

Developing iOS 9 Apps with Swift - Free Course by Stanford on iTunes U

ボタンを押してセグエを作る度にDetailViewControllerが作られるため、メモリーの無駄になるためiPadのようにSplitViewControllerを使ってMasterとDetailが同時に表示されている環境の場合、DetailViewControllerは1つだけ作って使い回すのが良いようです。

どうするのか?「Ctrl + ドラッグ」で作ったstoryboard上の3つのセグエを消去します。ボタンをCassiniViewControllerのコードに「Ctrl + ドラッグ」してターゲット・アクションとして「@IBAction」メソッドを作ります。名前は「showImage」にします。senderは当然「UIButton」です。

@IBAction func showImage(sender: UIButton) {
    if let ivc = 
  splitViewController?.viewControllers.last?.contentViewController as? 
        ImageViewController {
        let imageName = sender.currentTitle
        ivc.imageURL = DemoURL.NASAImageNamed(imageName)
        ivc.title = imageName
    }
}

SplitViewControllerで可能な方法ですが、iPadのように2つのViewControllerを同時に表示できる場合だけです。じゃあiPhoneのような切りかえが必要なデバイスの場合はセグエが必要です。しかしボタンからセグエを作るのではなく、ViewControllerからViewControllerにセグエを繋ぎます。

f:id:yataiblue:20160609152300j:plain

そして「Show」で繋いでからターゲット・アクションのメソッドを変更します。

@IBAction func showImage(sender: UIButton) {
    if let ivc = 
  splitViewController?.viewControllers.last?.contentViewController as? 
        ImageViewController {
        let imageName = sender.currentTitle
        ivc.imageURL = DemoURL.NASAImageNamed(imageName)
        ivc.title = imageName
    } else {
        performSegueWithIdentifier(Storyboard.ShowImageSegue, 
                                   sender: sender)
    }
}

これでiPhoneならセグエができるようになりました。

この後にUITextFieldの説明がありますが、デモは無かったのでこれでLecture8が終了です。明日からUITableViewの講義です。実は2年前に中断したパートです。今回はちゃんとやりきれるだろうか?

しかし、新しいアプリのアイディアが生まれたので少し考えるつもりです。

今日はここまで。