1

UITableViewControllerAとUITableViewControllerBがあるとします。AとBの両方がUIViewCをロードします。Cの戻るボタンで、元の場所ではなく、常にBに戻るようにするにはどうすればよいですか。

具体的な例を次に示します。A=iphoneskypeの連絡先ウィンドウ。B =チャットウィンドウ、各行は別の人とのチャット履歴ですC=チャットウィンドウには同じ人との会話が表示されます。

CはAまたはBからロードできますが、チャットウィンドウ(C)の戻るボタンをチャット(B)ウィンドウにのみ戻したいです。

乾杯。

4

4 に答える 4

2

これは悪いUIデザインであり、APIがサポートしていないため、これを実装するのは難しいと思います。

ユーザーは、使用する他のすべてのアプリと同じように、戻るボタンで前のビューに「戻る」ことを期待します。他のビューに移動すると、階層ではなくループであるため、さらに混乱します。ユーザーはB->C->Bに移動することもありますが、A-> C->B->Cに移動することもあります。(どうやってAに戻るのですか?)

Cの戻るボタンの代わりに、Cに到達した方法に関係なく、常にBに移動するボタンを右側に配置する必要があります。同じコンテキストの同じボタンでも常に同じ結果が得られるはずです。ユーザーは、ボタンのアクションを予測するために、どの非表示モードにあるかを覚えておく必要はありません。


Edit01 :(以下のコメントへの回答)

(これはすべて私の頭のてっぺんから外れているので、一粒の塩でそれを取ります。)ナビゲーションコントローラーの使用をやめ、代わりに自分でビューを管理する必要があります。各タブのビュープロパティのAビューとBビューをCビューに置き換えて、タブバーを介してビューを入れ替える必要があります。

見えないマスタービューから始めて、それにタブバーを追加する必要があると思います。マスタービューコントローラーで、各ビューの属性/アウトレットを作成します。各ビューで、属性/アウトレットをマスタービューコントローラーにリンクします。次に、AとBのCビュー呼び出しメソッドの「戻るボタン」(「チャット」というラベルを付けることを強くお勧めします)を使用して、マスタービューコントローラーのメソッドを呼び出し、(1)タブAまたはタブAからCビューを削除します。タブB(2)タブをBタブに切り替えてから、(3)ビューBをタブBにロードします。

このデザインがいかに不格好であるかを強調することはできません。他のアプリがそれを使用するかどうかは関係ありません。私の経験では、マーケティング部門がUIをユニークに見せたいので、大手企業はインターフェースの間違いを犯す可能性が高くなります。

比較して、電話アプリが同じ状況をどのように処理するかを見てください。電話をかけるために使用するタブ、お気に入り、連絡先、キーパッドなどに関係なく、電話をかけるとそのタブのビューに戻ります。別のメソッドで呼び出しを行う場合は、適切なタブを押すだけです。

他人の悪い例を無視してください。なぜ他人の過ちを再現しようと多くの時間と労力を費やすのですか?

于 2010-01-22T00:44:24.807 に答える
0

あなたはいつも呼ばれたビューに戻ってしまうでしょうpushViewController

AにBにメッセージを送信させて、Bに電話をかけてもらうことはできますpushViewControllerか?
私はあなたのアーキテクチャを理解していないかもしれませんが、それはうまくいくと思います。

于 2010-01-21T22:20:10.133 に答える
0

これを本当に実行したい場合は、CをプッシュするメソッドをBで作成し、AからBをプッシュして(アニメーションなしで)、Cをプッシュするメソッドを呼び出すことができます。もちろん、CをBにポップしても、Aはその下にあります。

于 2010-01-22T05:33:21.370 に答える
0

私はグーグルグループから答えを得て、彼の提案に従いました、それはうまくいきます:

スキマから:SkypeやBeejiveなどのこれらのアプリケーションが実行しているのは、ビューAがビューCを必要とする場合に、UITabBarにメッセージを送信してチャットタブに移動し、詳細ビューCをプッシュすることだと思います。これはタブバーがハイライトを変更したという事実を介してビューが変更されたことがユーザーに表示されるため、実際には優れています。from:stackoverflowスレッドをさらに読みました。私はあなたの質問が何であるかを理解しました。

于 2010-02-17T03:24:44.673 に答える