MD Blog

誰かの何かに役に立てることを書いていきたいです

[iOS] 連絡帳のデータを入力ができるキーボードアプリをリリースしました。

少し出遅れた感はありますが、iOS8の新しい機能で何かやりたいと思いキーボードアプリを作りました。
Xboardという、連絡帳のデータや現在位置のデータや事前登録した文言を入力できるキーボードです。

Xboard - iOS8用の便利キーボード

Xboard - iOS8用の便利キーボード

  • Mishima Design
  • ユーティリティ
  • 無料

作っていて気づいたのは「キーボードってアプリの中にアプリを表示できるようなものだな」ということです。

iPadの試作機では画面を2つに分けて2つのアプリを表示する実験が行われている、という噂がありましたが、iOS8のキーボードならそれに近いことができるのではないかと思いました。キーボードアプリに文字入力できない、割り当てられるメモリが少ないなどの制約はありますが。

好評なら電卓機能なども追加していく予定です。 しばらくは無料で提供しますのでもし気になった方はぜひダウンロードお願いします。

f:id:desing:20141117113428j:plain

[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

値がnilの場合、式全体がnilとなる。

var label: String? = nil
label?.toInt() // -> nil

変数の後に!

通常の変数の場合、この記述法はできずコンパイルエラーとなる。

optional変数の場合、値が強制的に展開される。

var label: String? = "123"
label!.toInt() // -> 123

値がnilの場合、展開できずに実行時エラーとなる。

var label: String? = nil
label!.toInt() // コンパイルは通るが実行時エラーとなる

Reference

https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html#//apple_ref/doc/uid/TP40014097-CH5-XID_399

[iOS] library not found for -lPods エラーが出た時

PROJECT -> Info のConfigurationsに、CocoaPodsのxcconfigファイルが正しく設定されていない可能性があります。

f:id:desing:20140529153046p:plain

podが何もインストールされていないのにxcconfigファイルが設定されているとエラーになるようです。

[iOS] UITableViewが一番下までスクロールした状態でModalViewを表示すると、UITableViewがずれる現象

UITableViewが、モーダル出現時にステータスバーが隠れたと判断し、ステータスバーの高さ分を調整しようとすることで起こるようです。

以下のようにステータスバーを常に表示する設定を行うことで回避できました。

[UIApplication sharedApplication].statusBarHidden = NO;

Reference

http://stackoverflow.com/questions/10502670/uiscrollview-not-functioning-correctly-after-modal-view-controller-displayed-in

[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]).
*/

References

http://stackoverflow.com/questions/10949440/iphone-viewwillappear-only-when-coming-back-from-other-views