2

ユーザーの場所の周りのポイントが入力されたマップを使用してiOS5アプリケーションを構築しようとしています。マップは、下部に検索バーがあるナビゲーションコントローラーにネストされています。検索バーは、検索バーの下にあるUITableViewに接続されています(検索結果用)。これら3つのビューはすべてUIScrollView内にあります。

階層は次のとおりです。

  • ナビゲーションコントローラー
    • UIビュー
      • スクロールビュー(次の3つが含まれています)
        • マップビュー
        • 検索バー
        • テーブルビュー

画像を投稿できなかったことをお詫び申し上げますが、ほぼ同じことを行っている別のアプリ、DarkSkyをご案内します

これが私がしたいことです:ユーザーが検索バーをタップすると、ビューが上にスクロールし、結果とともにテーブルビューが表示されます(キャンセルボタンを表示するためにシフトします)。検索して何かを見つけたりキャンセルしたりすると、ビューが下にスライドして地図が再び表示されます(下部に検索バーがあります)。これはDarkSkyで美しく行われます

私の問題に対処する他の質問を見たことがありますが、それらのどれも完全に解決策を示していません。これを実装する方法に関するベストプラクティスはありますか?

4

3 に答える 3

0

ほとんどの場合、ここは必要ありませんUIScrollView。ユーザーにスクロールを制御させたい場合にのみ使用してください。

TableSearchの例で示されているように、既存のUISearchDisplayController機能を使用できる場合があります。この例のバックグラウンド ビューは ですが、これは検索結果を表示するために使用されるサンプル テーブルではないことに注意してください。これは、背景テーブルのスタイルを変更すると確認できます。そのため、背景としてを使用しても、検索結果の表を表示することができます。UITableViewMKMapView

UISearchDisplayController が提供する遷移動作が合わない場合は、検索結果テーブルを自分で作成してアニメーション化する必要があります。インターフェースの設計では、検索結果テーブルを画面の下から見えないように配置します。ユーザーが検索するとき、UIView animateWithDuration:animations:を使用してテーブルを正しい場所に移動します。(テーブル フレームをマップ フレームと同じ値にするだけです。)

異なるデバイスの向きへの回転を許可する場合、回転が発生したときにテーブルの位置を更新する必要がある場合があります。

于 2012-08-28T00:06:13.403 に答える
0

アイデア: すべての TableView にはプロパティ tableHeaderview があります。

@property(nonatomic, retain) UIView *tableHeaderView

searchBarと を のmapView中に入れtableHeaderViewます。したがってtableHeaderView、 をコンテナ ビューとして使用し、tableViewそれに応じて をスクロールして、 を表示するだけtableHeaderViewです。

于 2012-08-28T07:03:31.253 に答える
0

ユーザーが検索テキストの入力を終了したときに、scrollView のコンテンツ オフセットを手動で設定することはできませんか?

マップビューの負の高さでスクロールビューをオフセットします。

myScrollView.contentOffset = CGSizeMake(0, -heightOfMapView);

または CGAffineTransformMakeTranslation を使用します

myScrollView.transform = CGAffineTransformMakeTranslation(0, -heightOfMap);

次に、マップを元に戻したい場合は、変換変換のリセットを使用します。

myScrollView.transform = CGAffineTransformMakeTranslation(0, 0);
于 2012-08-28T01:14:47.723 に答える