storyboardを使わずにiOSでおみくじを作る

ドットインストールの以下のレッスン

dotinstall.com

を、storyboardを使わずにswiftのみで作ってみる。

storyboardを使わないプロジェクト作成

を参考にして作成。ありがとうございます。

  • Single View Applicationを選択してプロジェクト作成
    • プロジェクトの設定ファイルの変更
      • Deployment Info -> Main Interface の中のMain削除
    • Main.storyboardLaunchScreen.xibを削除
    • AppDelegate.swiftapplicationメソッドにコードを追加
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    // ====↓追加=====
    self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
    self.window?.backgroundColor = UIColor.whiteColor() // 背景白
    self.window?.rootViewController = ViewController() // ViewControllerを指定
    self.window?.makeKeyAndVisible()
    // ====↑追加====
    return true
}

画面に必要な部品

  • ラベル1(あなたの運勢は・・・)
  • ラベル2(フォント大きめ。おみくじの結果を表示)
  • ボタン1(クリックすると占いを実行し、占い結果をラベルに表示)

ラベルとボタンを配置してみる

参考

001 UILabelで文字を表示 - Swift Docs

007 UIFontで文字を装飾 - Swift Docs

002 UIButtonでボタンを表示 - Swift Docs

感謝。

f:id:gawao:20150327150555j:plain

ボタンをクリックした時の処理を追加

ボタンをクリックした時にコンソールに出力するようにしてみる

// イベントを追加する
divineButton.addTarget(self, action: "onClickDivineButton", forControlEvents: .TouchUpInside)
 

/*
    占うイベント
*/
func onClickDivineButton(sender: UIButton) {
    println("onClickDivineButton: ")
    println("sender.currentTitle: \(sender.currentTitle)")
}

ボタンをクリックしてみるとエラーが(ヽ'ω`)・・・??

MyOmikujiSwiftOnly[12918:4911213] -[MyOmikujiSwiftOnly.ViewController onClickDivineButton]: unrecognized selector sent to instance 0x7fdba25bdeb0
2015-03-27 11:24:26.043 MyOmikujiSwiftOnly[12918:4911213] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[MyOmikujiSwiftOnly.ViewController onClickDivineButton]: unrecognized selector sent to instance 0x7fdba25bdeb0'

メソッド指定時にコロン:が付いていなかった!!

// メソッド指定にコロンを追加
// イベントを追加する
divineButton.addTarget(self, action: "onClickDivineButton:", forControlEvents: .TouchUpInside)
onClickDivineButton: 
sender.currentTitle: Optional("占った!")

成功!!

適当に装飾

  • Labelの背景色
  • 枠線、角丸、フォントサイズ
  • ボタンの背景色、角丸

f:id:gawao:20150327150958j:plain

完成

f:id:gawao:20150327151053g:plain

ソースコード

はまったところ

  • storyboardを使わずにプロジェクを作る方法がわからなかったので検索していくつか試した。時間かかった
  • 乱数を取得し、その数でenumから値を引っ張ろうとしたがやり方がわからずなかなかうまくいかなかった

storyboard使わないと位置の調整とか大変そう。
使ったら使ったで、複雑になってくると大変なのかな。。。
enumとか上手く使えるようになりたいです。
少しずつ作っていってコツを掴んでいきたい所存です。