好評販売中!!
2009-01-01 (Thu)
■ 日本特有のアプリを審査する人は言語設定「日本語」でチェックしてるみたい 
割とどうでもいい話ではありますけど、今朝リジェクトされて一緒にスクリーンショットが送られてきたんですが、そのスクリーンショットが日本語版のものでした。単にそれだけ。
■ UITableView で didSelectRowAtIndexPath した後はどこかでハイライトを解除する必要がある 
今回リジェクトされた理由ですが、タイトルの通りです。iPhoneヒューマンインターフェイスガイドライン に以下の通りに記述があります。(※強調表示は僕がつけた)
ユーザがリスト項目を選択すると、Table Viewはフィードバックを提供します。具体的には、項目を選択できる場合、ユーザが項目を選択すると、その項目を含む行が一時的にハイライトされ、その選択が受け付けられたことを示します。その後、すぐにアクションが発生します。つまり、新しいビューが表示されるか、または項目が選択されたことを示すチェックマークが行に表示されます。Table Viewは、選択された状態を永続的には表示しないため、行はハイライトされたままにはなりません。
Table View、Text View、およびWeb View > 使用方法と動作
こんなのは API でやってくれよとグチグチ言いたいわけですけど、そうなってはいないので、この処理は自分で実装する必要があります。
行の選択をした後、他のビューに移動する場合、または移動しない場合で二通りの実装が考えられます。
まずは多いパターン、ビューの移動が発生した場合ですが、移動先から戻ってきた時に選択を解除するコードを入れておけばオーケイです。
- (void) viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [tableView deselectRowAtIndexPath:[tableView indexPathForSelectedRow] animated:NO]; }
tableView がインスタンス変数になってる必要がありますけど、UITableViewController には漏れなく入れておくと良いかと思います。
次はビューが移動しないパターンです。設定画面とかで tableView を使ってモノを選ぶような場合に使われると思います。ここでも選択した後にハイライトを解除する必要があります。
- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [tableView deselectRowAtIndexPath:indexPath animated:YES]; }
これでまぁうまくいくんですが、deselectRowAtIndexPath の前後で tableView#reloadData を実行すると、ハイライトの仕方が変になります。具体的にはハイライトしている間、文字の領域が白抜きになってしまって、ま、説明するの大変なので体験してみてください。気にならなければ別に問題ないし。
というわけで、僕は以下のようにして実行を遅らせる事にしました。他に綺麗な方法が思いつかなかった。
- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { // do something [tableView reloadData]; [self performSelector:@selector(_deselectTableRow:) withObject:tableView afterDelay:0.1f]; } - (void) _deselectTableRow:(UITableView *)tableView { [tableView deselectRowAtIndexPath:[tableView indexPathForSelectedRow] animated:YES]; }
とてもウザイです。
何も知らずにテーブルビューつかったプロジェクトは、必ずリジェクトされることになりそうでなんとも。
ですよねーー。
普通に使ってるだけなのに。
最近変わった点なんですか?
なかなかうまくやりくりするのは、難しいもんすね。
私のも12月はじめの頃に出したアプリでは通って
下旬にバージョンアップ申請したらこれでRejectされました。
ガ━━(;゚Д゚)━━ン!!
せめて最初から言ってくれよ、って感じです。
はぁ…、しかしリジェクトされるのは仕方ないけど、リジェクト後の再審査が普通に申請したのと同じくらい時間がかかるってのは、かなりゆるせない仕様ですよね。
表示ラベルがハイライトされても変更させなくするんだ。
//セル選択時文字色
//非推奨なので、Labelがハイライトされても変更しないように設定
//cell.selectedTextColor = [UIColor blackColor];
cell.textLabel.highlightedTextColor = nil;