UITextFieldのカーソルの色を変更する
UITextField のカーソルの色を変更する方法です。こちらを参考にしました。
開発環境
カーソルの色を変更する
UITextField の tintColor プロパティを変えると、カーソルの色が変わります。 tintColor プロパティは、Interface Builder でもコードからでも変更することができます。
変更前
変更後
おわりに
tintColor は UIView クラスで定義されています。説明はこう書いてありました。
The first nondefault tint color value in the view’s hierarchy, ascending from and starting with the view itself.
UIView Class Reference より引用
UIView クラスを継承しているクラスでこのプロパティが使えます。しかし、そのクラスの色が変わる具体的な部位が書いてあるわけではないので、「自分で想像してね」ということなのでしょうか?今度調べます。
NavigationControllerで移動する一つ前のViewControllerを取得する iOSアプリ開発
iOSアプリ開発で NavigationController を使っている際、移動前の ViewController を取得したかったのでドキュメントを少し眺めてみました。
移動前の ViewController の取得方法は UINavigationController Class Reference に書いてありましたので備忘録として残しておきます。
開発環境
NavigationControllerで移動する一つ前のViewControllerを取得する
UINavigationController に属する ViewController 達は、画面を移動して表示される度に NavigationController が持つ配列に後入れで格納されます。それでは一つ前の ViewController を取得する方法を紹介します。
まず、自身(ViewController のサブクラス)を保有する NavigationController を呼び出します。その中には移動前の全ての ViewController が収められている ViewContllers 配列があります。その配列の後ろから二番目に、移動前の ViewController があります。
UINavigationViewController の ViewController のリファレンスには以下のように書いてありました。
The root view controller is at index 0 in the array, the back view controller is at index n-2, and the top controller is at index n-1, where n is the number of items in the array.
let viewc = navc.viewControllers[navc.viewControllers.count - 2]
UITextField内の文字が変更される度に関数を呼び出す
iOSアプリ開発で、UITextField 内の文字が変更される度に関数を呼び出すことをできるようにします。そのためには NSNotificationCenter クラスを使います。
開発環境
完成予定図
TextFieldないの文字が変わる度に、コンソールに文字を出力します。
UITextField 内の文字が変更されたことを知るために
UITextField 内の文字が変わったらこの関数を実行してくれと、NSNotificationCenter クラスにお願いをします。以下のコードを ViewWillAppear メソッド内に書きます。
NSNotificationCenter.defaultCenter().addObserver( self,
selector: Selector("何らかの関数:"),
name: UITextFieldTextDidChangeNotification,
object: nil
)
何らかの関数に、コンソールに「変わったよ」と表示する関数を指定してみます。
func textFieldDidChange(aNotification: NSNotification) {
print("変わったよ")
}
View に UITextField を乗っけただけのアプリで動作確認をしてみます。
これで完了です!
おわりに
今回は addObserver の name 引数に UITextFieldTextDidChangeNotification を指定しましたが、他にもこのような定数が沢山用意されています。例えば、「キーボードが表示されるよ」を表す UIKeyboardDidShowNotification があります。これらは各クラスのリファレンスの下部に Notifications としてまとめられています。
Swiftで数字のみ含まれる文字列か判定する
テキストフィールドに入力された文字列が、数字のみで構成されているか判定したかったので、Swift での文字列検索を調べてみました。ドキュメントを読んだところ、「単純に検索したいなら NSPredicate を使うといいよ。」と書いてあったのでやってみました。
参考サイト
開発環境
数字のみで構成されている文字列か判定する
NSPredicate クラスで正規表現を使って判定します。 NSPredicate のインスタンスを作成するコードです。
NSPredicate は検索や比較などの条件を文字列で指定して使うクラスです。文字列を使わないで検索条件を書くこともできます。MATCHES を書くと、正規表現で比較できるようになります。\\\\d+ は「一文字以上の 0 ~ 9 の文字列が続く」という意味を表しています。
この検索条件を実行してみましょう
predicate.evaluteWithObject("123456789") // true
predicate.evaluteWithObject("1234y6789") // false
predicate を evaluteWithObject メソッドで実行しています。実行結果は Bool が返ります。
おわりに
今回のように、ある文字列が含まれているかを判定するにはいい方法だと思います。NSRegularExpression クラスを使用するよりは、単純なコードになるのではないでしょうか。
UITableViewのCellを選択不可にする
iOSアプリ開発で、UITableView の Cell を選択させない方法を調べたので、メモします。
開発環境
TableView にある全ての Cell を選択不可にする
TableView の Selection プロパティを設定します。
- Storyboard や xib ファイルで TableView を選択して、Attributes Inspector を開く
- Selection プロパティを No Selection に設定
TableView にある特定の Cell を選択不可にする
プログラムで指定します。
cell.selectionStyle = UITableViewCellSelectionStyle.None
また、Prototype Cell や Static Cells のテーブルなら、Attributes Inspector からでも設定できます。Selection プロパティを None に設定します。
まとめ
TableView の Cell を選択不可にするには2通りの方法がある。
- UITableView の Selection プロパティを No Selection に設定する
- UITableViewCell の Selection プロパティを None に設定する
余談
iOSアプリ開発中に UITableView の Cell が選択不可になったため、この件を調べました。これらのプロパティはもちろん設定していませんし、UITableView の delegate, datasource はちゃんと設定してありました。その TableView を削除して作り直しても駄目で、Storyboard のソースも調べてみましたが原因は解りませんでした。結局プロジェクトごと作り直しました。
まぁ、自主的に Cell を選択不可にする方法がわかったので良しとします。原因はまた今度探ってみます。
iOSアプリ開発でナビゲーションバーの色を変更する
iOSアプリ開発でナビゲーションバーの色を変更したかったので調べました。下記のサイトを参考にしました。
開発環境
ナビゲーションバーの色を変更する
AppDelegate の application メソッドに下記のコードを入力します。
ナビゲーションバーのボタンとタイトルの色を変更する
AppDelegate の application メソッドに下記のコードを追加します。
UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName: UIColor.whiteColor()]
// ボタンなどの色を変更 UINavigationBar.appearance().tintColor = UIColor.whiteColor()
iPhoneかiPadかを判定する iOSアプリ開発
iOSアプリ開発で、現在使用しているデバイスが iPhone か iPad なのかを判定します。
開発環境
判定方法
現在使用しているデバイスの情報を取得するには、UIDevice クラスを使います。UIDevice クラスのドキュメントを見てみると、このクラスには userInterfaceIdiom プロパティと UIUserInterfaceIdiom enum が定義されています。説明を読んでみるとそれっぽいことが書かれているので、この二つを使います。
- userInterfaceIdiom
- For universal applications, you can use this property to tailor the behavior of your application for a specific type of device.
- UIUserInterfaceIdiom
- The type of interface that should be used on the current device.
UIDevice Class Reference より
判定方法のコード
使用しているデバイスが iPad かを判定するコードです。
// some code here
}