1

ストーリーボードを使用したタブバー アプリケーションがあります。タブ 1 は Mapview を備えた UIViewController であり、タブ 2 は UITableViewController です。

appdelegate は (カスタム クラスを介して) Web フェッチを呼び出し、その Web 応答を取得して (カスタム クラスを介して) 解析し、(カスタム クラスを介して) CD-db に情報を配置します。

MapVC は CD-db から結果をフェッチし、NSMutableArray (プロパティ) を設定してループします。配列には、for ループで MKAnnotation を作成するために使用される 2 つの座標を持つカスタム CD-db オブジェクトが含まれています。各 MKAnnotation から userLocation までの距離が計算され、MyLocation クラス オブジェクトは、サブタイトル プロパティの距離値で完成されます。したがって、マップ上の各ピンには、タイトル (名前) とサブタイトル (距離) が表示されます。

TableVC は、CD-db への個別のフェッチを作成し、cellForRowAtIndexPath (CFRAIP) で使用される配列プロパティを設定します。

ここで、テーブルビューに各セルの距離も表示するようにします。そのため、uitabbarcontroller をサブクラス化し、TableVC.tableview のデリゲート/データソースを MapVC に設定することをお勧めします。私の質問は、uitabbarcontroller をサブクラス化し、デリゲートとデータソースを設定するにはどうすればよいですか?

次のようなもの: アプリ デリゲートで、ウィンドウの rootviewcontroller を取得しますか?

4

1 に答える 1

1

まず、UITabBarController をサブクラス化する必要があります。Xcode で新しいファイルを作成し、UITabBarController を親クラスとして設定します。

次に、ストーリーボードに移動して tabbarcontroller を選択し、そのカスタム クラスを作成したばかりのクラスに設定します。

tabVCviewDidLoadでそのサブ VC を取得し、必要なものを見つけます。これが疑似コードです。後で整理できます。

CSMapListViewController *mapListViewController;
CSTableViewController *tableViewController;

for (UIViewController *vc in self.viewControllers)
{
    if ([vc isKindOfClass:[CSMapListViewController class]])
    {
        mapListViewController = (CSMapListViewController *)vc;
    } else if ([vc isKindOfClass:[CSTableViewController class]])
    {
        tableViewController = (CSTableViewController *)vc;
    } 
}

tableViewController.tableview.datasource = mapListViewController;

それが役立つことを願っています。

于 2013-01-24T00:15:54.207 に答える