Swiftで遊ぼう! on Hatena

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

Swiftで遊ぼう! - 698 - Multithreading and Text Field

今日から講義8に入ります。しかし最初はScrollViewの続きです。

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

2年前にクリアしている所なので今のところ復習です。新しい内容も含みますが、2年前の講義とほぼ同じなのでこのまま続けていきます。

ここでSplit View Controllerを組み込んでいくための下準備をしていきます。オブジェクト・ライブラリから新しいViewControllerをドラッグ&ドロップします。新しいViewControllerコードも用意します。「CassiniViewController」と名前を付けて、新しく設置したジェネリックなViewControllerのアイデンティティ・インスペクタから「CassiniViewController」を選びます。

再びオブジェクト・ライブラリからSplit View Controllerをドラッグ&ドロップします。デフォルトのMasterとDetailを消去して、Split View Controllerから「Ctrl + ドラッグ」して、CassiniViewControllerを「master view controller」にして、ImageViewControllerを「detail view controller」にします。

次はCassiniViewControllerに3つUIButtonを設置して、名前をそれぞれ「EarthCassini」「Saturn」にして、Stck Buttonでまとめてコンストレイントで整えます。細かな説明はしなくてもいいでしょう。Stack Buttonの使い方は既にここで説明しています。

Navigation Controllerも「Embed in」します。iPhoneiPadで動くようにするためです。こういう説明を聞いて理解できなければ、まだまだ基礎知識が足らないんで復習をしましょう。

次は3つのボタンからImageViewControllerに「Ctrl + ドラッグ」してSegueを作ります。

f:id:yataiblue:20160604215702j:plain

今回のポイントは1つのSegueを使い回す実装法です。こういう実装法も知っていないと絶対できないでしょう。しかし本当にこういうコーディングができるようになるんだろうか?

3つのセグエのidentifierに同じ名前をつけます。「Show Image」にします。

CassiniViewControllerをコーディングします。

import UIKit

class CassiniViewController: UIViewController {
    
    private struct Storyboard {
        static let ShowImageSegue = "Show Image"
    }


    override func prepareForSegue(segue: UIStoryboardSegue, 
                                  sender: AnyObject?) {
        if segue.identifier == Storyboard.ShowImageSegue {
            if let ivc = segue.destinationViewController as? 
                                          ImageViewController {
                let imageName = (sender as? UIButton)?.currentTitle
                ivc.imageURL = DemoURL.NASAImageNamed(imageName)
                ivc.title = imageName
            }
        }
    }

}

struct型のStroyboad定数も、ポール先生ならではのコーディングスタイルです。ハードコーディングを避けるってのはプログラミングの基本中の基本ですね。こういうスタイルが自然にできるようになりたいものです。

まだまだ自然にコーディングできませんが、かなり自然に理解できるようになりました。

これでボタンの実装ができました。次はマルチスレッドや、Scroll Viewのデリゲーションメソッドによるズーミングの話が来ます。プロトコールとデリゲーションは復習しておきましょう

今日はここまで。