0

開発者の皆さん!Table View を構築し、配列オブジェクトを配置し、ユーザーが Table View 内のオブジェクトをクリックするとコードを実装し、そのオブジェクトの独自の nib ファイルをロードし、if ステートメントを使用しています。(ちょっとしたメモですが、Table View に 40 個のオブジェクトを設定しました。これは、私が持っているものと必要なものの量だからです)、方法があるので、if ステートメント コードの先頭で作成した最初の 2 つの if ステートメントのみを表示します。テーブル ビュー内の 40 個のオブジェクトすべての if ステートメントが多すぎます:

if ([[glossaryArray objectAtIndex:indexPath.row] isEqual:@"Title"]) {
    Title *titleLoad = [[Title alloc] initWithNibName:@"Title" bundle:nil];
    [self.navigationController pushViewController:titleLoad animated:YES];
    [titleLoad release];
    }
    else if ([[glossaryArray objectAtIndex:indexPath.row] isEqual:@"Meta Description Tag"]) {
        MetaDescriptionTag *metaDescriptionTagLoad = [[MetaDescriptionTag alloc] initWithNibName:@"MetaDescriptionTag" bundle:nil];
        [self.navigationController pushViewController:metaDescriptionTagLoad animated:YES];
        [metaDescriptionTagLoad release];
    }
...

それだけです。すべての if ステートメントを見せびらかしたくないので、このコードは機能します。各配列オブジェクトは、独自の個別の nib ファイル (配列オブジェクトごとに 40 個の nib ファイル 1) をロードし、これらの nib ファイルのそれぞれをロードします。 Web ビュー、画像ビュー、テキスト フィールド、その他のオブジェクトに似ています。私を狂ったと呼んでください、しかしこれは私が今考えることができる唯一のコードなので、誰かがこのコードをより簡単なコードに編集するのを手伝ってくれることを願っています、ありがとう

4

1 に答える 1

2

の値をglossaryArray対応するクラス/nib 名に機械的に変換できる場合 (たとえば、すべてのスペースを削除することにより)、次のようにすることができます。

NSString *className = [self classNameFromString:[glossaryArray objectAtIndex:indexPath.row]];
UIViewController *viewController = [[NSClassFromString(className) alloc] initWithNibName:nil bundle:nil];
[self.navigationController pushViewController:viewController animated:YES];
[viewController release];

それらを機械的に変換できない場合は、一方から他方への NSDictionary マッピングを常に構築するか、異なるいくつかを特別なケースにすることができます。または、クラスと nib の名前を変更します。

于 2011-04-12T16:36:42.857 に答える