blogtitle
RSS Twitter
  • TOP
  • このブログについて
  • imotenもくじ
  • VPS拡張編
    • VPS機能拡張
    • セキュリティ対策
    • WordPress設定
  • ブログ主おすすめ
    • おすすめアプリ
    • おすすめ周辺機器
    • Xcode
    • ターミナルサービス設定
  • レシピ(料理)

【Objective-C】XcodeでiPhoneアプリを作る基礎を学ぶ6【『初めてのiOSアプリケーション』その4】

Day:2013.2.4 0:05 Comments: 7

code iPhone Mac Xcode

Xcode


初めてのiOSアプリケーション編最終話となりました。

今回はソフトウェアキーボードでDoneを押した時の処理を実装していきます。


【Objective-C】XcodeでiPhoneアプリを作る基礎を学ぶ5【『初めてのiOSアプリケーション』その3】 | くずのは探偵事務所


なぜキーボードが消えない?


テキストフィールドのソフトウェアキーボードはどうしてDoneを押しても消えないのか?

って考えるよね。

そもそもその考え方が間違ってる。

なぜテキストフィールドをクリックするとソフトウェアキーボードが現れるのか?

が正解。

だって、テキストフィールドをクリックしたらソフトウェアキーボードが出るようにする、なんてコードはどこにも書いてない。

なのになぜ現れるのか?

その答えは、iOSではテキストフィールドに文字が入力出来る状態になると、自動でソフトウェアキーボードが現れる仕様になっている。

だから、入力状態になっている限りソフトウェアキーボードは消えない。


skitchSmHoWp



なんと理不尽な答えと思っても、そういう仕様なんです。

Appleが決めたことなんです。

それに逆らうことなんて出来ません。

黙って従うのがベストです。

Doneをタップした時にフォーカスが外れるようにすると、ソフトウェアキーボードも消えるって事なので、そういう処理を書いていこう。



UITextFieldDelegateプロトコルの実装


なんだか訳わからない言葉が出てきたね。

これは、Xcodeにはユーザーがいちいち細かい処理を書かなくてもいいように、元々大量に処理(プロトコル)が実装されてる。

その1つがUITextFieldDelegate。

だから、UITextFieldDelegateを使いますよって記述するだけで、XcodeがUITextFieldDelegateの中に書かれている処理を使えるようにしてくれる。

賢いね。Xcode。

おぼろげにわかったところで記述しよう。


インターフェース宣言に書き足す


ViewController.hを開く。


skitchphkNXL



@interface HelloWorldViewController : UIViewControllerに <UITextFieldDelegate>を書き足し、

@interface HelloWorldViewController : UIViewController <UITextFieldDelegate>

にする。


skitchChcSYf



これでViewControllerはUITextFieldDelegateの機能を使えるようになった。



メソッド(処理)を記述


さて、それではDoneキーを押したときに入力状態を解除するメソッドを記述していこう。

ViewController.mを開く。


skitchZeTT89



前回記述した- (IBAction)メソッドの下にでも記述しよう。


skitchmnAsv2



そこに下記コードを記述する。

コピペじゃなくきちんと書いたほうがいいよ。

じゃないと覚えないよ。


- (BOOL)textFieldShouldReturn:(UITextField *)theTextField {
  if (theTextField == self.textField) {
    [theTextField resignFirstResponder];
  }
  return YES;
}


skitchCYm1EV



また前回のように1行ずつ説明していこう。


- (BOOL)textFieldShouldReturn:(UITextField *)theTextField {


これはメソッドの書き出し。

前回のボタンの処理の書き出しである- (IBAction)〜はXcodeが自動で作ってくれたが、今回は自分で書かなきゃいけない。

世知辛いね。

- (BOOL)textFieldShouldReturn:(UITextField *)変数名 {

この行は、深いことを考えず丸ごと覚えた方がいい。

テキストフィールドにフォーカスされてソフトウェアキーボードが出てくるけど、Done(Return)をタップしたときの挙動をどうするか、っていう意味。

深く考えるよりも、これを書けばDoneキーをタップした挙動を決められると覚えた方が早い。



if (theTextField == self.textField) {


これは、入力状態のテキストフィールドがViewController.hに記述されているプロパティのtextFieldと同一のものなら、という意味になる。

ドキュメントにはテキストフィールドは1つしかないので別に書かなくてもいいけど、沢山テキストフィールドがある場合、エラーを防ぐことになるので記述した方がいいでしょう。と書いてあった。

ちょっと意味がわからないね。



[theTextField resignFirstResponder];


これは、入力状態(FirstResponder)のテキストフィールドを解除(resign)するという意味。

これで入力状態が解除され、ソフトウェアキーボードが消えるって事だね。



return YES;


始まりがBOOL(YESかNOかを返答する)なのでYESを返しているが、今回の場合はYESでもNOでもどっちでもかまわない。

YESが帰ってきた場合とかそういう処理を記述していないので。

Doneを押した段階で入力状態が解除され、キーボードが閉じる。



シミュレータを起動してみよう


シミュレータを起動してテキストフィールドを入力状態にし、Doneをクリックしてみると・・・


skitchCZhAjX



閉じた!


skitchwABtE7



ユーザー名を入れてボタンを押すと・・・


skitchewrXdU



Hello,kyoji kuzunoha!と表示された!


skitchtCN1YZ



これは嬉しすぎる。



とりあえずHelloWorld完成!


ドキュメントを見ると、これで完成みたい。

お疲れ様!

と思ったんだけど、if (theTextField == self.textField) { がなぜ必要なのか気になるので実験してみた。


もう一つテキストフィールドを作成


実験用にテスト用テキストフィールドを作成した。

上にあるテキストフィールドと作成方法は同じ。


skitchostgav



ただし、名前は同一には出来ないので、アウトレット接続時にtestTextFieldとした。


skitchC6ulPC



シミュレータを起動し、テストで作成したテキストフィールドをクリックしてDoneを押してみると・・・


skitchAn3fza


閉じない。



if (theTextField == self.textField) { を削除


if (theTextField == self.textField) { を削除し、下記のようにコードを変更した。


- (BOOL)textFieldShouldReturn:(UITextField *)theTextField {
   [theTextField resignFirstResponder];
   return YES;
}


skitch8Ob3ow



シミュレータを起動し、テストで作成したテキストフィールドをクリックしてDoneを押してみると・・・


skitchAn3fza


閉じた。


skitchXrg5gi


ということは、if (theTextField == self.textField) { はどのテキストフィールドかを識別しているって事だね。

これがないとすべてのテキストフィールドに同じ仕様を適用してしまう、って事みたい。

なるほど。



簡単なプログラムでも難しいね


さて、初めてのiOSアプリケーションを作ってみてどうだったでしょうか。

プログラマの人から見れば簡単すぎて片手で出来るようなものだけど、まったくわからない人から取ってはとてつもなく高い山に見えるね。

でも色々いじっているうちにちょこっとずつわかってくるから、是非挑戦してみて欲しいところ。

あと、終わってからまた『初めてのiOSアプリケーション』を読むとわかってくるところもあるので、再び目を通してみてください。


初めてのiOSアプリケーション(PDF)


関連記事


    • 【Objective-C】XcodeでiPhoneアプリを作る基礎を学ぶ4【『初めてのiOSアプリケーション』その2】
    • 【Objective-C】XcodeでiPhoneアプリを作る基礎を学ぶ5【『初めてのiOSアプリケーション』その3】
    • 【Objective-C】XcodeでiPhoneアプリを作る基礎を学ぶ3【『初めてのiOSアプリケーション』その1】
    • 【Objective-C】XcodeでiPhoneアプリを作る基礎を学ぶ14【懐中電灯アプリを作る】
    • 【Objective-C】XcodeでiPhoneアプリを作る基礎を学ぶ1【プロジェクト作成】


« 出来ないと思っていた事でもやってみれば案外出来るということ 【Objective-C】XcodeでiPhoneアプリを作る基礎を学ぶ5【『初めてのiOSアプリケーション』その3】 »



Comments: 7

  1. bavarotti1981 より:
    2013年2月4日 12:26 AM

    お疲れさまです。
    感激しました。コピペじゃなく、一から入力してみます。
    当たり前って思って使ってるアプリにもっと愛情をもとうと思える数日間でした。少し頑張って作業してみます。

    返信
    • 葛葉 キョウジ(管理人) より:
      2013年2月4日 10:46 AM

      ドキュメント通りにやっただけですけどねw
      ドキュメントには詳しく書いてあるので、
      それを見てやった方が理解が深まると思いますよ。

      返信
      • bavarotti1981 より:
        2013年2月4日 10:48 AM

        かしこまりました。ありがとうございます。
        猿真似が終わったら、色々見ながらやってみます。

        返信
  2. 青りんご より:
    2013年2月4日 9:03 PM

    お疲れ様です(^^ゞ

    うまくいかないな〜って思ったら大文字が小文字だったり、文字を入れ間違えだったり・・・何度もエラーでて、昔のドラクエの復活の呪文を思い出しましたw

    関係ないけど、昨日さくらのVPSの設定をした時に「【VPSに】ドメインを取ろう【割り当て】」の記事がすごく参考になりました。
    きっとこれからアプリを作ろうとしてる人にも、この記事が役に立つこともあるハズ(^^)/

    返信
    • 葛葉 キョウジ(管理人) より:
      2013年2月5日 12:18 AM

      コードを書いてるうちに慣れてきて、
      何となく意味がわかってくるとやたら面白いですw
      でも、慣れるまでがきついですね(;´Д`)w

      返信
  3. チョコ より:
    2013年3月31日 8:07 PM

    おつかれさまです m(__)m

    私みたいな初心者でもすごくわかりやすかったです★
    最初はコードなども全然わかりませんでしたが書いているうちにわかってきました
    ありがとうございます

    返信
    • 葛葉 キョウジ(管理人) より:
      2013年4月1日 2:10 PM

      おお、それはよかったです。
      四則演算計算機の方もオーバーフロー時の処理方法が思いつかなくて頓挫してますけど、
      それなりのものは出来ますよw
      色々試してみてください。

      返信
返信をキャンセルする。

email confirm*

post date*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

  • お知らせ


    毎週日曜25時から25時30分までは定期サーバーメンテナンスタイムです。
    サーバーの再起動やアップデートを行いますので、ブログに接続出来なくなる場合があります。

  • About

    kyoji_kuzunoha HN:葛葉キョウジ
    Apple信者です。
    iPhoneを使いたくてSoftBankにMNPしたら、電波がクソ過ぎてトランシーバー並みに使えなかったので、なんとかdocomo回線で使おうと研究した結果、SIMフリーiPhoneにたどり着く。
    でも、docomoメールが使えないので色々調べたらimotenという神サーバーソフトがあることを知り、VPSと出会う。
    imotenのために仕方なく借りたVPSを色々いじっているうちにのめり込み、チューニングしまくってAirVideoサーバー、WebDAVサーバー、ミュージックストリーミングサーバーにセットアップして超快適な環境に。
    設定方法などを自分のメモとして書きためつつ、現在はXcodeを勉強中。
    ゲーム、ガジェット、料理が大好きな30オーバーのオッサンです。
    毎日ブログ更新してます。(日曜は休み)
  • 最近のコメント

    • 【白黒】iPhoneの画面の色が反転してしまった時の対処法【ネガ】 に 匿名 より
    • いい蕎麦屋。悪い蕎麦屋。 に どすこい より
    • 【白黒】iPhoneの画面の色が反転してしまった時の対処法【ネガ】 に 山野邊弘次 より
    • 【白黒】iPhoneの画面の色が反転してしまった時の対処法【ネガ】 に 山野邊弘次 より
    • 【白黒】iPhoneの画面の色が反転してしまった時の対処法【ネガ】 に 山野邊弘次 より
    • いい蕎麦屋。悪い蕎麦屋。 に やまがた より
    • 【白黒】iPhoneの画面の色が反転してしまった時の対処法【ネガ】 に たけ より
    • 【白黒】iPhoneの画面の色が反転してしまった時の対処法【ネガ】 に 葛葉 キョウジ(管理人) より
    • 【白黒】iPhoneの画面の色が反転してしまった時の対処法【ネガ】 に 匿名 より
    • 【白黒】iPhoneの画面の色が反転してしまった時の対処法【ネガ】 に 匿名 より
  • 最近の投稿

    • 【内臓保護】酒量を思い切り減らしてみた【アル中予防】
    • 毎日豆乳を飲んでみた【1ヶ月目】
    • MacBookに対応しているMoshiのUSB-C充電ケーブルを買ってみた
    • MacBookにインストールしたアプリ
    • MacBook2016の使用感その1
    • 【Mac】ことえりのライブ変換を使ってみた【El Capitan】
    • ジャストシステムのポータブルバッテリーを買ってみた
    • 【MacBook】iPhoneのテザリングについて
    • MacBook2016とアクセサリを購入してみた
    • iPhone6PlusからiPhone6sに乗り換えてしばらく経った現在の使用感
  • 人気記事

    • 【imoten】SIMフリーiPhoneで、iモードメール@docomo.ne.jpを使ってみた。設定編【yahoo!版】 481 comments
    • 【Gmail】CentOS6.x(64bit)でimotenを設定して@docomo.ne.jpメールを使う【主にさくらインターネット編】 268 comments
    • imotenQ&A 184 comments
    • 【DTI】SIMフリーiPhoneでdocomo.ne.jpメールを送受信する方法【outlook.com編】 130 comments
    • 【Gmail】CentOS5.x(32bit)でimotenを設定して@docomo.ne.jpメールを使う【主にDTI編】 126 comments
    • 【iPhone】imotenの送信メールをSSLで暗号化する【docomoメール】 112 comments
    • 【MyCloud】さくらVPSをAirVideoサーバーにする【ストリーミング】 99 comments
    • docomo版iPhone5s(5c)用SIMについてちょこっと考察してみた 99 comments
    • 【imoten】SIMフリーiPhoneで、iモードメール@docomo.ne.jpを使ってみた。設定編【Gmail編】 97 comments
    • SPモードメールをiPhoneでプッシュさせる【docomo.ne.jp】 97 comments
  • アーカイブ

  • カテゴリー

    • amazon
    • android
    • Apple
      • AppStore
      • iPad
      • iPhone
      • Mac
    • AppleWatch
    • blog
      • WordPress
      • 移転作業ログ
    • code
    • docomo
    • Game
      • 100万人の信長の野望
      • 3DS・DS
      • PCgame
      • PlayStation
      • XBOX360
    • MVNO
    • News
    • SIM
    • VPS
      • imoten
        • DTI
        • imoten機能拡張
        • さくらVPS
        • はじめに
      • セキュリティ対策
      • 機能拡張
    • Windows
      • ターミナルサービス
    • Xcode
    • おすすめアプリ
    • おすすめ周辺機器
    • もっと評価されるべき
    • グルメ
      • レシピ
    • リモートデスクトップ
    • レビュー
    • 健康
      • ダイエット
      • ランニング
    • 動画
      • TAS
      • スーパープレイ
    • 周辺機器
    • 学習
      • 英語
    • 未分類
    • 雑談
  • カウンタ


    全体:11343160

    今日:1450

    昨日:4526

Copyright © くずのは探偵事務所,All right reserved.