UIButton, UIAlertController, UITextView, UITextFieldあたりに触りました
内容
iPhone/iPadプログラミングバイブル iOS9/Xcode7/Swift 対応 (smart phone programming bible)
- 作者: 布留川英一
- 出版社/メーカー: ソシム
- 発売日: 2015/10/27
- メディア: 単行本
- この商品を含むブログ (1件) を見る
上の本を参考にiOSのUIViewと戯れています。
- 最初からSwiftでコードを書きたい時はSwiftでプロジェクトを作成する
- Text用, 画像用のViewがあった話
- Swiftのクラス定数っぽいものの名前
- ボタンの種類
- type: UIButtonType.System
- type: UIButtonType.InfoDark
- type: UIButtonType.InfoLight
- type: UIButtonType.ContactAdd
- type: UIButtonType.DetailClosure
- ボタンを押したときのイベントの設定
- アラートの種類
- アラートのボタンの挙動の設定
- AlertActionのハンドラーの引数としてのクロージャの利用例
- UITextFieldについて
- UITextViewでも文字編集可能にできる
最初からSwiftでコードを書きたい時はSwiftでプロジェクトを作成する
これまでObjective-CのプロジェクトにSwiftのクラスをちょいちょい書いて試してたんですが、プロジェクト作成時にObjective-CかSwiftかを選べるのでSwiftで書きたい時は、この時点で Swiftを選んだ方が楽です。
関連して少し調べてみたのですが、, Objective-CからSwift, SwiftからObjective-Cのクラスの参照については下記ブログ記事が参考になりました。
http://techblog.yahoo.co.jp/ios/swift-from-objc/
上記記事より手順だけ簡単にまとめると、
- SwiftからObjective-Cを参照する場合はBridging Headerを用意して、そこに必要なクラスをimportする
- Objective-CからSwiftを呼ぶ場合はビルド時に自動生成される.hファイルをimportする
となります。
Text用, 画像用のViewがあった話
String.drawAtPoint
メソッドや、UIImage.drawAtPoint
メソッドを見て、ひええ、となっていたのですが、Label
クラスやUIImageView
クラスがちゃんとありました。
少し UIImageView
をカスタマイズしたい時などに UIImage.drawAtPoint
メソッドなどを使うのかな、と思いました。
Swiftのクラス定数っぽいものの名前
タイププロパティといいます。
ボタンの種類
UIButtonはコンストラクタで指定するtypeで見た目が変化します。
type: UIButtonType.System
type: UIButtonType.InfoDark
type: UIButtonType.InfoLight
type: UIButtonType.ContactAdd
type: UIButtonType.DetailClosure
何かミスったかもしれない、という感じなのですが、現場に入っていろいろ見てみようと思います。
Customが画像ボタン作るときに使うみたいでした。
let button = UIButton(type: UIButtonType.Cutom) button.setImage(image, forState: UIControlState.Normal)
また、ボタンに表示される画像やテクストはそれが表示されるときのボタンの状態と一緒に指定します。
ボタンを押したときのイベントの設定
func onClick(sender: UIButton) { if sender.id == BTN_TARGET { // do something } } func makeButton() -> UIButton { let button = UIButton(type: UIButtonType.System) button.tag = BTN_TARGET // 適当なInt button.addTarget(self, action: "onClick:", forControlEvents: UIControlEvents.TouchUpInside) return button }
button.addTarget(self, action: "onClick:", forControlEvents: UIControlEvents.TouchUpInside)
のactionのコロンを忘れてあたふたしたのはいい思い出です。
UIControlEvents.TouchUpInside
はインタフェースビルダーで設定した覚えがあるのですが、どうなのでしょう。
アラートの種類
普通のアラート(コンストラクタで指定するpreferredStyleは UIAlertControllerStyle.Alert
)とアクションシート(コンストラクタで指定するpreferredStyleは UIAlertControllerStyle.ActionSheet
)があります。
アクションシートは下図のようなボタンが縦に並んだシートです。
アラートのボタンの挙動の設定
alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil)) // 表示 self.presentViewController(alert, animated: true, completion: nil)
AlertActionのハンドラーの引数としてのクロージャの利用例
慣れるために眺めます。
alert.addAction(UIAlertAction(title: "Yes", style: UIAlertActionStyle.Default, handler: {(alert) in self.showAlert(nil, text: "Yesをクリック") }))
{ (クロージャのブロックに渡される変数名) in 計算 }
のような感じです。
UITextFieldについて
HTMLでいうフォーム。ViewControllerにUITextFieldDelegateを実装させることで、フォーム内に入力された文字が変化したときの挙動を設定できます。また、UIKeyboardTypeでキーボードの種類を、returnKeyTypeでreturnキーにあるボタンのスタイルを決定できます。
UITextViewでも文字編集可能にできる
UITextViewでもその内部の文字の編集が可能です。UITextView#becomeFirstResponder()
メソッドで編集を開始させ、UITextView#resignFirstResponder()
で編集を終了させます。
UITextViewで入力された文字が変化したときの挙動を設定したい場合は、 UITextViewDelegate
を実装します。
今日はここまでです。