1

UIViewControllerから派生したテーブルを表示する iOS アプリケーションに がありますNSMutableArray。この表の各セルはUIViewController、ユーザーが選択を行ったときに呼び出される一意のものを参照しています。「didSelectRowAtIndexPath:」メソッドでやろうとしているのは、テーブルの構築元の値に一致するキーと、それぞれに対応するクラス名を含む値を含むUIViewController経由を動的に作成することです。呼び出す必要があります。リストがかなり長いので、for ループを使用してこれを行う必要があると思いますが、その方法について少し混乱しています。私はこのように見えます:NSMutableDictionaryNSMutableArrayUIViewControllerNSMutableDictionary

NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
    [dict setObject:@"aViewController" forKey:@"SelectionA"];
    [dict setObject:@"bViewController" forKey:@"SelectionB"];
    [dict setObject:@"cViewController" forKey:@"SelectionC"];

私のTableViewの基礎であるNSMutableArrayは次のようになります。

NSMutableArray *myArray = [[NSMutableArray alloc] initWithObjects:@"SelectionA", @"SelectionB", @"SelectionC",...,nil];

セル内の値への参照を取得するにはどうすればよいですか?

回答者全員に事前に感謝します。

4

3 に答える 3

2

多数の ViewController を作成することはお勧めできません。1 つの ViewController を作成し、それらの tableCell の値をそれに渡す必要があります。つまり、セルを選択することで、ViewController のデータ モデルを変更します。ただし、同じ ViewController を提示します。

セルが異なるタイプに対応する場合 (たとえば、1 つのセルが道路の mao、別のセルがテキスト値) の場合にのみ、異なる ViewController を呼び出す必要があります。

別のビュー コントローラーが本当に必要な場合は、セル データから表示する型を取得します。

didSelectCellRowAtIndexPath

myAppDelegate *appDelegate = 
    [[UIApplication sharedApplication] delegate];

UIViewController *viewControllerToDisplay;
switch (selection.type) {
  case MapType:  
      viewControllerToDisplay = appDelegate.mapViewController;
  case Picture:
      viewControllerToDisplay = appDelegate.pictureViewController;

}

viewControllerToDisplay を navigaton Controller にプッシュします。

于 2012-12-13T18:47:49.947 に答える
0

これが解決策です。クラスの名前がわかっている場合は、すべてのクラス名を配列に格納し、キー ClassName と Xib を持つ辞書を使用します。名前を保存するよりも plist を好みますが、他の方法も使用できます。

そして、テーブルまたはピッカーのdidselectで、次のようなコードを配置します。

Class classobject = NSClassFromString([[ClassArray   objectAtIndex:row]valueForKey:@"ClassName"]);

id object = [[classobject alloc] initWithNibName:[[ClassArray objectAtIndex:row]valueForKey:@"Xib"] bundle:nil];

[self.navigationController pushViewController:object animated:YES];

最初の行は文字列をクラスに変換します。id は任意のオブジェクトを保持できるという利点があるため、id を使用してオブジェクトを作成します。そして最後に、カスタム クラス オブジェクトを使用して、やりたいことが何でもできるようになりました。ここでは、デモ用にナビゲーションを行いました。

于 2015-06-09T04:08:44.370 に答える
0

各セルにビュー コントローラーが本当に必要な場合は、辞書を使用してセルを検索する必要はありません。選択はインデックス パスによって行われるため、配列を選択することをお勧めします。

セルに表示する名前と、選択時にプッシュするビュー コントローラーへのポインターの 2 つのプロパティを持つカスタム オブジェクトを作成します。myArray文字列の代わりにこれらのオブジェクトをロードします。セルに入力するときは、行に一致するオブジェクトを選択し、その名前を使用します。セルがタップされたら、行に一致するオブジェクトを選択し、そのコントローラーを押します。

(しかし、他の人が言ったように、同じコントローラーを使用してデータのみを変更できる場合は、それが道です!)

于 2012-12-13T18:57:16.423 に答える