愛と勇気と缶ビール

ふしぎとぼくらはなにをしたらよいか

iPhoneやAndroidのUIガイドラインは念頭に置きつつほどよく無視するのがいい

「漢の家計簿」は、項目をスワイプ → 削除ボタンが出る → 削除ボタンをタップ という操作で登録した項目を削除できるのですが、分かりづらい!という指摘が@xaicronからあったので、スワイプでなく項目のタップでも削除ボタンが出るようにしました。現在、審査待ちです。iPhoneアプリはやっぱり更新に時間がかかるのがイライラムラムラしますね。

なんとなく知っている人も多いかと思いますが、iPhoneでテーブル(あるいはリスト)から項目を削除するのは大体二通りの方法があって、

  • ナビゲーションバー(アプリ上部のバー)に「編集」とかのボタンがあって、それをタップするとテーブルにある全ての項目の編集・削除モードに入る
  • セルをスワイプするとその項目の削除モードに入る

という感じです。ちょっと分かりづらいですが iPhoneアプリ開発、その(190) 削除するぜ!|テン*シー*シー に両方の画像がありますね。

iOSの5.0 (4.0だったかな) くらいからはナビゲーションバーの右側とか左側にそれぞれ2つのボタンを置けるようになったので1つ目の方法を取れないこともなかったのですが、ミスタッチしそうだし、なんだかあの削除モードというのが僕はあまり好きでないので、「まぁスワイプでいいか」と思って2つ目の方法にして放置してました。サーセン。


「スワイプで項目を削除できる」っていうのは一応iOSで共通の操作というかAppleお勧めの挙動だったりするんですが、どう考えても分かりづらいんですよねコレ。分かりづらいから初期起動した時に「ここをスワイプで消せますよー」みたいなガイドを表示しようかなーとも思ったのですが、なんか実装するのめんどくさいし、そもそも使い方の説明が必要な時点でそのアプリってシンプルじゃないよね?と思ったのでガイドはやめて項目タップで削除ボタンを出すようにしました。
(※本記事のコメントにあるように、スワイプ動作に慣れていない人向けに「編集」ボタンを置かないというのは完全にアプリ側の都合なので、スワイプ動作の直感性の無さだけをもって「Appleのガイドラインは微妙」という主張をすることは出来ません)

とはいえ、実はiOS SDKには「スワイプした結果として表示される削除ボタンを、プログラム中から任意のタイミングで表示させる」方法が実はありません。少なくとも僕の知る限りでは。iPhoneアプリはこんな感じに変に融通の利かない所が多くて、これがWebアプリとかだったらこんなの簡単なのに!ムキー!と時々なるのですが、まあフレームワークに乗っかるというのは元々そういうもんなので、しょうがないですね。しょうがないので、UITableViewCellのaccessoryViewにそれっぽいUIButtonをぶっ込んで対応しました。ちゃんちゃん。


これに限った話ではないのですが、AppleGoogleの出しているiOS, Android用のUIガイドラインは頷ける内容も多いのですが、鵜呑みにするものではないと思っています。大きなやつを挙げると、

  • iOSのガイドライン通りにアプリを作るとアプリの設定画面とアプリの本体が別々になってしまう(なぜか「設定」アプリから個々のアプリの設定画面に行かなければいけない…)。これはどう考えても使いにくいだろうハゲ。アプリの設定はアプリの中に置け。
  • (これはガイドラインではないが) Android3.0以前ではAction Barの代わりにMenuを使うけど、あれは存在が分かりにくい。tabとかの方がマシ。

とかとか。「iPhoneではこれが普通だから」「Androidではこれが普通だから」「これはWebアプリだから」「Apple (or Google) がそう言っているから」というような理由で思考停止しないようにせんといかんなあ、と今回思いました。とはいえプラットフォームで共通の動作、推奨の動作を完全に無視すると今度はその動作を期待している人にとっておかしな動きをするアプリケーションになってしまうので、単純にガイドラインを無視するっていうわけにもいかないのが面倒なところです。


今回の話でいうと、「タップで削除ボタンが出るようにする。スワイプでも期待通りに削除ボタンが出るようにしておく」というのが正しいプラクティスになると思われます。この辺のことは↓の本にも書いてあります。この本はよいものだ。


あれ、日本語のオライリー本を買うのはやめたんじゃなかったっけ?てへぺろ