テーブルビューでセルをスワイプしたときに「もっと見る」ボタンを表示する方法(iOS 7のメールアプリのようなもの)
私はこの情報をこことCocoa Touchフォーラムの両方で探しましたが、答えを見つけることができないようで、私よりも賢い人が解決策を教えてくれることを期待しています。
ユーザーがテーブルビューのセルをスワイプしたときに、複数の編集ボタン(デフォルトは削除ボタン)を表示させたいのです。 iOS 7のメールアプリでは、スワイプで削除できますが、"MORE"ボタンが表示されています。
.
アップルが必要なものを提供してくれるまで待っていられないでしょう?そこで、私はこんな方法を考えてみました。
カスタムセルを作成します。その中に2つのuiviewを入れる
1. upper
2. lower
下側のビューには、必要なボタンを追加します。アクションを他の IBActions のように処理します。 アニメーションの時間やスタイルなどを決めることができます。
ここで、上のビューにUISWIPEGESUREを追加し、スワイプジェスチャーで下のビューを表示させます。これは以前にもやったことがありますが、私の知る限りでは最もシンプルなオプションです。
お役に立てれば幸いです。
これは標準のSDKではできません。しかし、Mail.appの動作を多かれ少なかれ模倣した様々なサードパーティのソリューションがあります。それらのうちのいくつか (例えば MCSwipeTableViewCell, DAContextMenuTableViewController, RMSwipeTableViewCell) は、ジェスチャー認識装置を使ってスワイプを検出し、いくつか (例えば SWTableViewCell) は、標準の UISScrollView の下に第二の UISScrollView を配置します。SWTableViewCell) は、標準の UITableViewCellScrollView
(UITableViewCell
のプライベートサブビュー) の下に、2つ目の UISScrollView を配置し、それらのいくつかは UITableViewCellScrollView
の振る舞いを変更します。
私は、タッチ操作が最も自然に感じられる最後のアプローチが最も好きです。具体的には、MSCMoreOptionTableViewCellが良いでしょう。ニーズに応じて選択してください(左から右へのパンも必要かどうか、iOS 6との互換性が必要かどうか、など)。また、これらのアプローチのほとんどには負担が伴います。Appleが UITableViewCell
サブビュー階層に変更を加えた場合、将来のiOSバージョンで簡単に壊れてしまう可能性があることに注意してください。
UITableViewCellをサブクラス化して、ユーザーがセルをスワイプするたびに呼ばれるメソッド
willTransitionToState:(UITableViewCellStateMask)stateをサブクラス化する必要があります。state
のフラグは、Deleteボタンが表示されているかどうかを知らせ、そこにMoreボタンを表示/非表示にします。
残念ながら、このメソッドは削除ボタンの幅もアニメーション時間も与えてくれません。そのため、Moreボタンのフレームとアニメーション時間をコードにハードコーディングする必要があります(個人的には、Appleはこの点を何とかすべきだと思います)。