2011年2月19日土曜日

UITableView セクションヘッダの再描画

例えばCellを編集したあと、Cellを再描画させたいような場合は
[tableView reloadData];
で大丈夫なようだ。

ただ、これだと表示しているすべてのCellを再描画するので、
セクションヘッダを再描画したい場合は
[tableView reloadSectionIndexTitles];
を使えばよい、と思ったのだがどうもこちらの環境ではうまく動作しない。
とりあえずreloadDataで我慢する。

2011年2月12日土曜日

UITableViewControllerからの脱却

自作のAppでこれまではUITableViewControllerを使っていたのだが、TableViewの他にサブビューも表示、例えばAdMobの広告Viewなどを表示させたい場合にはUITableViewControllerではなく、その基底クラスであるUIViewControllerをつかうべしと公式ドキュメント「iOS Table VIewプログラミングガイド」にあるのでそうすることにした。置き換えは比較的簡単で、これまでUITableViewControllerを継承していたクラスをUIVIewControllerから継承させ、明示的にUITableViewDelegateとUITableViewDateSourceを指定してやればいい。つまりは

旧)
@interface MyViewController: UITableViewController <...>

新)
@interface MyViewController:UIViewControler <UITableViewDelegate,UITableViewDataSource,...>

に書き換えるだけでいい。
あとは

@property (nonatomic,retain) IBOutlet UITableView* tableView;

として、これにいままで使っていたUITableViewをIBでつないでアクセスできるようにすればほぼOK.(おっと、IB使わないでもできるけれど、自分はIB使える部分はなるべく使うポリシー)。

これでとりあえずは問題なさそうにみえるけれど、実は2点ほど問題があって、ひとつは選択したセルが非選択状態にならないという問題。これはHIGに反するので「iOS Table Viewプログラミングガイド」に載ってるよう、viewWillAppearをオーバーライドしてやればいい。

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [tableView deselectRowAtIndexPath:[tableView indexPathForSelectedRow] animated:YES];
}

もし、セルを選択してもビューが切り替わらないようなAppの場合はdidSelectRowAtIndexPath内で

    [tableView deselectRowAtIndexPath:indexPath animated:YES];

とでもしてやればOKだろう。

もう一つの問題は、NavigationControllerで「Edit」ボタンを押しても編集モードにならない点。これはsetEditingをオーバーライドして、自前で編集モードになるよう呼び出してやればよい。

- (void)setEditing:(BOOL)flag animated:(BOOL)animated {
    [super setEditing:flag animated:animated];
    [tableView setEditing:flag animated:animated];
}

とりあえずこのくらいやっておけば問題なさそう。


2011年1月19日水曜日

位置情報サービス(2)

その後、Yahoo!のローカルサーチというのが使えそうだという事がわかったのだが、実際使ってみると情報がとれるには取れるのだが、電話帳にあるデータをすべて取ってくるのでそこらにある小さい事務所とかもすべて取得されてしまい、今度はフィルタリングが大変すぎてやっぱり使い物にならない。いちおう電話帳意外にもYOLPカセットギャラリーで公開されている任意のデータから取得できるようになっているのはいるが、見ての通りこっちは情報が少なすぎ、かつ偏りすぎでこれまた使えない。

そうこうしながら他も探していると、こんなページを発見。これもやはりYahooのローカルサーチなのだが、APIが違う。どうやら古いバージョンで廃止は決定しているようだが廃止時期が決まってないようだ。これを使ってみると緯度経度から簡単に商業施設及び駅名が取得できた。とりあえずこれを使うのが一番よさそう。廃止になるまでにはGoogleプレイスが使えるようになっていれば良いのだが・・。

2011年1月15日土曜日

位置情報サービス

いわゆるチェックイン情報を得たいと思っていろいろ調べてみたのだが。

まず簡単に見つかったのがGoogleプレイス。APIもあるようなのでこれを使えば簡単かと思い開発ページで開発用キーを申請しようとしたのだが、フォームに入力しても何もおこらない。
あれこれ調べてみたところ、2010年7月からスタートと書いてあるのにここに入力してもキーはまだ発行されないみたい。個人情報も入力させておいて音沙汰なし、ってどうなんやろ。

で、次に見つけたのがYahooのwebサービス。試したところとりあえずうまく動いてはくれたがやはり問題が。
自分はGPSで得られた緯度経度から、それに近い商業施設なり、駅なりの情報がほしいのだが、このAPIでは必須入力に緯度経度と「名前」が必要。いや、その「名前」がわからんから困ってるのであって・・・。どうやら名前に「東京ミッドタウン」とかいれておくと、「東京ミッドタウンクリニック」とか詳しい名称を教えてくれるものらしい。ならば空白やNULLを指定すれば候補全部上げてくれるかと思いきや、エラーをはくだけで使い物にならない。結局のところこれもだめ。

他にいいサービスがないかもう少し調査してみるしかないなぁ。

2011年1月12日水曜日

ブログ開始

遅ればせながらブログ開始です。
ここではiPhoneプログラムの情報を中心に載せていく予定です。