頭と尻尾はくれてやる!

iOSアプリなどの開発日記です


Facebookのいいね!ボタンを設置してみた

赤ちゃんの成長曲線で、先日グラフを表示するswfを修正し、英語や中国語でも表示できるようにしました。
この時同時にやればよかったのですが、忘れていたのが、Facebookのいいね!ボタン。
英語版のページのみですが、さきほど設置してみました。

Facebookのいいね!ボタン

↑こんな感じ。

Like Button - Facebook Developers
↑こちらのページでサイズやURLを指定すればすぐにタグを入手することができます。

とりあえず、、、というかもちろん、自分でいいね!ボタンを押しました!

ちなみに、Facebookはアカウントはありますが、全然使っていません。


iPhone SDK 4をダウンロードした

我がiPhone3GSに先ほどiOS4をインストール。

どうやら、iPhone SDK 4も無料でダウンロードできるようになったようなので、こちらもダウンロード&インストール。
これで、Xcodeのバージョンが3.2.2から3.2.3になりました。

Xcode3.2.3になったよ!

まだあまり使っていませんが、とりあえず3.2.2でいじっていたファイルがビルド&実行できるのは確認しました。
実は最初ビルド時になにやら警告がいっぱい出たのですが、Xcodeを再起動したりしているうちにいつの間にか警告は出なくなりました。

よくわかりませんが、ともかく当ブログ内で今後の記述は、Xcodeのバージョンは3.2.3で作成されたものであります、、、と言ってもややこしいので、ブログのカテゴリ変えることにしました。

もともと"iPhone"だったのを"Xcode3.2.2"にして、新しく"Xcode3.2.3"と"iPhone"を追加。
開発関連以外のiPhoneネタを"iPhone"に入れることにしました。


データを保存するのに便利なクラス

iPhoneアプリで、いろんなデータを保存する方法を調べていたら、こんなページが。
オブジェクトの状態をファイルに保存・復元する。(シリアライズ・デシリアライズ) - 24/7 twenty-four seven

おそろしく参考になりました!
Settingsクラスはこのまま使える(もちろんプロパティの内容は変わるけど)!
ありがたや、ありがたや。

よくわからなかったのが、なぜloadSettings:やsaveSettings:やapplicationDidFinishLaunching: などでself.settingsやsefl.dataFilePathとしているのかってところ。
別にSettings *settingsってオブジェクトを用意しててもいいんじゃないの?と思い動かしていたのですが、、、
どうやら、保存時にapplicationWillTerminate:が呼び出されるけど、この時点でオブジェクトが使えない状態になる場合もあるみたい。
そういうことかと納得。

iPhoneアプリ開発ってのは、起動時や終了時のどういうタイミングでどのメソッドが呼び出されるのかってのに、要注意だな。






UITextFieldをやっつけろ!

何がやっつけろ!なんだろうね?
まあいいや、とにかくUITextFieldです。
iPhoneアプリで名前やアカウント名などの文字を入力する時なんかに使うあれです。

UITextFieldの実行結果

これを動的に、つまりInterface Builderを使わずに書こうとしたのですが、やっぱりはまりました。
たいていUITextFieldの入力部分にタッチしたらキーボードが出てきて、入力が終了して"Done"をタッチした時にキーボードが閉じるじゃないですか。
あれをやろうとしたわけです。

クラスファイルの構成はこんな感じ。
HogeAppDelegate
View1Controller : UIViewController
View1 : UIView

結論から先に言うと、UIButtonの時(頭と尻尾はくれてやる! なぜかUIButtonが動かない!)と同じでUITextField関連の記述をView1Controller.m内に書くとうまく動いてくれませんでした。

View1.m内にこんな感じで書きました。
- (id)initWithFrame:(CGRect)frame {
    if ((self = [super initWithFrame:frame])) {
        UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(10, 56, 200, 30)];
        textField.borderStyle = 3;//枠線のスタイル
        textField.placeholder = @"Enter Your Name";//入力前にうっすら書いてくれる
        [self addSubview:textField];
        textField.delegate = self;
        textField.returnKeyType = UIReturnKeyDone;//"Done"にしてみた
       
        [textField release];
    }
    return self;
}
- (BOOL)textFieldShouldReturn:(UITextField *)sender {
    NSLog(@"sender.text = %@" , sender.text );
    [sender resignFirstResponder];//キーボードを閉じる
    return YES;
}

入力完了時(例えばDoneをタッチ)にこのtextFieldShouldReturn:が呼ばれるそうな。
ところが、最初なかなか動いてくれなかったのですよ。
全然textFieldShouldReturn:が呼び出されない。

iPhoneプログラミング・・・のただのメモ。  リターンキーを押した時の振る舞いを決める
使用するには、当該 UITextField のデリゲートとなっているクラス内で コードを記述する必要があります。
↑この記事を読んで、
textField.delegate = self;
ってのを足したらめでたく動いてくれましたが、、、コンパイル時(って言うのかな?とにかく実行時ではない)に警告がでます。
Class 'View1' does not implement the 'UITextFieldDelegate' protocol

ああそうか、ってことで、View1.hの記述を変更。
プロトコルってやつだな。
//@interface View1 : UIView {
@interface View1 : UIView<UITextFieldDelegate> {

まあUITextFieldクラスで処理してくれた内容をこっち(View1)側で処理しようとするとなんぞやりとりが必要なことは私でも理解できる。
その渡す先を指定するのが
textField.delegate = self;
と認識しています。
いや、まだデリゲートってのがよくわかってないんですけどね。

ともかく、入力完了時にtextFieldShouldReturn:内の
sender.text
で入力した内容を得ることまではできました。


ついにこの日が!BIG1000第454回の結果!

まあこんなものか。

【今までの戦績】
開催回開催日くじ種類購入日的中数備考
第454回6/9 ~ 6/13BIG10002010年06月09日4/11←今回更新
一つずつだな
第453回6/5 ~ 6/6BIG10002010年06月04日3/11がんばれよ
第452回5/29 ~ 5/30BIG10002010年05月28日2/11(゚д゚;) 2コダケ?
第449回5/15 ~ 5/16BIG10002010年05月14日5/11うーん
第449回5/15 ~ 5/16BIGプレゼント5/14おいおい
第448回5/8 ~ 5/9BIG10002010年05月07日3/11(゚д゚;) コレダケ?
第446回5/1 ~ 5/2BIG10002010年04月30日6/11見せ場なし
第444回4/24 ~ 4/25BIG2010年04月23日5/14orz
第443回4/17 ~ 4/18BIG2010年04月16日6/14-
第441回4/10 ~ 4/11BIG2010年04月08日6/14-
第440回4/3 ~ 4/4BIG2010年04月02日8/14もう一息
第438回3/27 ~ 3/28BIG2010年03月26日6/14-
第437回3/20 ~ 3/21BIG2010年03月19日9/14あと1つ!
第436回3/13 ~ 3/14BIG2010年03月12日5/14-

※BIGの対象は試合数は14。10試合的中で末等です。
※BIG1000の対象は試合数は11。8試合的中で末等です




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.