テキストボックスに何か入力してもらった後、キーボードをしまう(閉じる)動作を実現したいと思いました。こんな(↓)感じです。
↓
■
キーボードをしまう場合、よくあるのは;
1)リターンキーを押すと、入力が確定してキーボードが閉じる
2)「閉じる」ボタンがキーボードの上についていて、それをクリックすると閉じる
3)キーボードの領域以外の部分をクリックすると、キーボードが閉じる
というパターンでしょう。(ほかにもっとクールな方法があれば、知りたいです)
「1」と「2」は、トリガーとアクションがイメージしやすいので、ある程度プログラムの勘がある人なら、ググったりして実装方法を見つけるは難しくないんではないでしょうか。
「3」については、自分が何かアプリ使ってて、経験則的にやることあるけど。実装するとなると、そのイメージがすごく難しいです。少なくとも、ぱんには難しいです。
「キーボード以外の領域」というけれど、その中にもテキストボックスがあったり、ボタンがあったり、テキストラベルがあったり。それらを除外した領域の座標を、いちいち計算して、実現しないとだめなんだろうか。どうなんだろうか。。
と思っていたら、意外にもカンタンに実現できるをこと知りました。
■
まず、キー入力が発生する ViewController の Xib ファイルを開き、メインのViewインスタンスを選択し、IdentityInspector でクラスを「UIControl」に設定します。
次にXibに対応する、 .h ファイルを「Option + クリック」で Xib と .h を横に(アシスタントモードで)並べます。
次に、Xib の中で一番大元の View を選択します(ブルーラインで選択された状態になってる部分)。そして「Control + ドラッグ」で、 .h ファイルのメソッド指定部分に放り込む。 すると、下記のような状態になるので、Connection を「Action」に、Name を適当に「backgroundTapped」などに、Event を「Touch Up Inside」に指定し「Connect」ボタンをクリックします。
↓
こんな感じで、.h にメソッドが宣言されます。
↓
.m ファイルでは;
[self view] に対して、endEditing:YES を送って、編集モードを終わらせます。
以上です。
なあんだ。一番大元の View をタップしたら、編集モードを終わらせればいいだけか。
こういうのって、知ってしまった後になれば、カンタンすぎることなんだけど。知るまでの道のりが、意外に遠い。
こういうネタを集めて、体系的に整理して、非プログラマー向けの本書きたいなあ。すごく売れそうなタイトルも、考え済みです。どなたか編集者の方で、この記事読んでいらっしゃる方いたら、
facebook等で、ぜひご連絡を!w
■
今日のネタ元は下記書籍です;
『
iOSプログラミング 第2版』。

【追記:2012年3月27日】
『
iOSプログラミング 第2版』は、一見小難しいですが、読破すれば力になること確実。『
iOS開発におけるパターンによるオートマティズム』の内容で、かつ、それぞれの説明を素人でもわかりやすくした感じです。本気で学習したい人には、ぴったりの教材だと思います。ただし『
iOSプログラミング 第2版』は、海外では2012年4月に、
第三版(英語)が発売されます。英語ができる人は、それを待つのが賢明です。英語苦手な人は、『
iOSプログラミング 第2版』と、
第三版(英語)の両方買って、勉強するのがいい気がします。