2012-03-13 41 views
1

私はかなり複雑なサブクラスのUITableViewControllerを持っています。これに加えて、テーブルビュー内のデータは、ユーザー設定(別のビューでアクセス)に基づいて、3つの方法のいずれかでソートできます。各設定では、行の項目の動作が共通ですが、テーブルビューのソートとグループ化が異なります(たとえば、表示設定に関係なく、各行の選択アクションは同じです)。同様に、上部および下部のツールバー一貫性がある)。これは、適用されたユーザー設定に基づいて私のコードに多くの分岐をもたらします。異なるテーブルビュー間の切り替え

これを少し分割するといいですか?私はUITableViewの3つの別々のサブクラスを考えましたが、共通性を失います。だから抽象的なカスタムUITableViewのサブクラス、3つのサブクラスがそこから継承?設定が変更されたとき、インスタンスをどのように切り替えるのですか?

おそらくあなたは良いアイデアを持っていますか?テーブルビュー自体の内容だけが変更されるので、同じコードを3回繰り返すことは避けてください。

答えて

0

これは、単一のUITableViewControllerで行うことができます。 UITableViewController RootViewControllerを呼び出します。

RootViewControllerがロードされると、どのタイプの並べ替えが行われるかを示すインジケータを読み込むことができます。おそらくNSUserDefaultsに設定を保存し、RootViewControllerのviewDidLoadメソッドでユーザーの設定選択をロードします。

この設定を次の例のようなフラグとして使用してください。

- (NSInteger)tableView:(UITableView *)aTableView 
numberOfRowsInSection:(NSInteger)section 
{ 
    if ([sortType isEqualToString:@"Name"]) { 
     // return number of rows 
    } 
    else if ([sortType isEqualToString:@"Distance"]) { 
     // return number of rows 
    } 
    else { 
     // return number of rows 
    } 
} 

影響を受けるテーブルの各メソッドでは、ソートタイプでこれを行うだけです。

私は役立つことを願っています。

+0

ありがとう、これは私が現在持っているものです - 各メソッドの3つのif節、そしてたくさんの読みにくいコードです。私は、これらをサブクラスに移動する方法や機能を別の方法で分割する方法があるかどうか疑問に思っていました。 –

0

"hot"、 "new"、 "near"などのようにtableviewデータソースのparamsを設定できます。ユーザーがtableviewを切り替えると、paramsの値を変更してtableviewをリロードできます。

関連する問題