[iOS] 連絡帳のデータを入力ができるキーボードアプリをリリースしました。
少し出遅れた感はありますが、iOS8の新しい機能で何かやりたいと思いキーボードアプリを作りました。
Xboardという、連絡帳のデータや現在位置のデータや事前登録した文言を入力できるキーボードです。
作っていて気づいたのは「キーボードってアプリの中にアプリを表示できるようなものだな」ということです。
iPadの試作機では画面を2つに分けて2つのアプリを表示する実験が行われている、という噂がありましたが、iOS8のキーボードならそれに近いことができるのではないかと思いました。キーボードアプリに文字入力できない、割り当てられるメモリが少ないなどの制約はありますが。
好評なら電卓機能なども追加していく予定です。 しばらくは無料で提供しますのでもし気になった方はぜひダウンロードお願いします。
[ios] Unable to simultaneously satisfy constraints container view とエラーが出たとき
問題が出るConstraintのPriorityを下げるとエラーが出なくなりました。 詳しいことはわかりません。
[Swift] Optionals またはSwiftの?と!について
SwiftにおいてOptionalsとは、値にnilを許す変数のことを指します (通常の変数はnilを許さない)。 Swiftでは?や!を用いてOptionalsに関する操作を行います。
型に対する操作
型の後に何も付けない
通常の変数 (値にnilを許さない)。
var label: String = "123"
var label: String = nil // compile error
型の後に?
optional変数となる。
通常の変数であることが期待される箇所ではコンパイルエラーとなる。
var label: String? = nil
label.toInt() // コンパイルエラー
変数に!を付ければ通常の変数と同様に扱えるが、値がnilだと値が展開できずに実行時エラーとなる恐れがある。
var label: String? = nil
label!.toInt() // コンパイルは通るが実行時エラーとなる
型の後に!
optional変数となるが、通常の変数として扱われる。
値がnilであってもコンパイルは通るが、値が展開できずに実行時エラーとなる恐れがある。
var label: String! = nil
label.toInt() // コンパイルは通るが実行時エラーとなる
変数に対する操作
変数の後に何も付けない
通常の変数なら通常の変数、optional変数ならoptional変数として扱われる。 よってoptional変数を通常の変数として扱いたい場合、?や!を用いた操作を行う必要がある。
変数の後に?
通常の変数の場合、この記述法はできずコンパイルエラーとなる。
optional変数の場合、値がnil以外ならその値が展開される。
var label: String? = "123"
label?.toInt() // -> 123
var label: String? = nil
label?.toInt() // -> nil
変数の後に!
通常の変数の場合、この記述法はできずコンパイルエラーとなる。
optional変数の場合、値が強制的に展開される。
var label: String? = "123"
label!.toInt() // -> 123
値がnilの場合、展開できずに実行時エラーとなる。
var label: String? = nil
label!.toInt() // コンパイルは通るが実行時エラーとなる
Reference
[Xcode] 行末の空白を自動的に削除する
Xcode > Preferences > Text Editing
Include whitespace-only lines をオン
Reference
http://stackoverflow.com/questions/1390329/trim-trailing-spaces-in-xcode
[iOS] library not found for -lPods エラーが出た時
PROJECT -> Info のConfigurationsに、CocoaPodsのxcconfigファイルが正しく設定されていない可能性があります。
podが何もインストールされていないのにxcconfigファイルが設定されているとエラーになるようです。
[iOS] UITableViewが一番下までスクロールした状態でModalViewを表示すると、UITableViewがずれる現象
UITableViewが、モーダル出現時にステータスバーが隠れたと判断し、ステータスバーの高さ分を調整しようとすることで起こるようです。
以下のようにステータスバーを常に表示する設定を行うことで回避できました。
[UIApplication sharedApplication].statusBarHidden = NO;
Reference
[iOS] UINavigationControllerからpopされるイベントを検出する
UIViewControllerのプロパティ「isMovingFromParentViewController 」を使う。
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
// Pop
if ([self isBeingDismissed] || [self isMovingFromParentViewController]) {
}
}
UIViewController.hに記述があります。
/*
These four methods can be used in a view controller's appearance callbacks to determine if it is being
presented, dismissed, or added or removed as a child view controller. For example, a view controller can
check if it is disappearing because it was dismissed or popped by asking itself in its viewWillDisappear:
method by checking the expression ([self isBeingDismissed] || [self isMovingFromParentViewController]).
*/