目的・役割

ランキング1件の詳細を表示し、状態に応じて「投票へ進む」「結果を見る」「結果ロック」「クイズゲート」を分岐させる中枢画面。

UI 構成

要素種類説明
RankingHeaderViewカスタムViewタイトル・タグ・投票数ティア・期間表示
選択肢プレビューList各 Choice の label / image / shortLabel
「投票する」ボタンButton状態に応じて表示・遷移先変化
「結果を見る」ボタンButton投票済 or 閲覧権限ありで表示
選択肢申請ボタンButton未追加の選択肢を提案できる
通報ボタンToolbarReportSheetを起動
シェアボタンToolbarShareImageService経由でシェア

状態(accessPolicy で分岐)

条件表示内容
開始前「○月○日 ○時開始」カウントダウン
受付中・未投票・quiz無投票ボタン → VoteView/ThreePointVoteView
受付中・未投票・quiz有投票ボタン → QuizGateView
受付中・投票済結果を見るボタン → ResultView
終了・投票済結果のみ表示 → ResultView
終了・未投票・閲覧不可ResultLockedView
削除済み「このランキングは削除されました」

遷移

操作遷移先
「投票する」(quiz無, single)VoteView
「投票する」(quiz無, threePoint)ThreePointVoteView
「投票する」(quiz有)QuizGateView
「結果を見る」ResultView
選択肢申請ChoiceRequestSheet
通報ReportSheet

使用するデータモデル

RankingDetailViewModel {
    var ranking: Ranking
    var choices: [Choice]
    var hasVoted: Bool
    var hasVotedOptimistically: Bool  // 楽観UI
    var nextVoteNumber: Int  // 1=初投票, 2=revote1, 3=revote2
    var accessPolicy: RankingAccessPolicy
}

実装メモ

関連

変更履歴

バージョン日付変更内容
1.02026-05-09初版作成