1

これが私の質問です: 呼び出す UITableViewController が 2 つあります。OriginalTableViewController と SecondTableViewController。SecondTableViewController は NSMutableArray と UISegmentedControl によって設定され、ユーザーは一連のデータをナビゲートして複数の行を選択できます。

私がしたいのは、ユーザーが複数の行を選択できるようにし、ナビゲーション バーの [保存] ボタンをクリックしてから [OK] をクリックしてビューを閉じ、SecondTableViewController の選択された行を入力する必要がある OriginalTableViewController に戻ることです。

4か月前にコーディングの方法を学び始めて以来、どのように進めればよいか正確にはわかりません。委任を使用する必要がありますか? それとも何か?助けていただければ幸いです。

4

1 に答える 1

0

あなたの問題については、委任が最良の選択です。SecondTableViewController でプロトコルを定義し、OriginalTableViewController でそのプロトコルを実装します。[保存] ボタンが押されると、2 番目のテーブルは選択されたデータを元のテーブルに通知し、元のテーブルは 2 番目のテーブルをポップ/破棄してそのテーブルをリロードできます。

SecondTableViewController.h で、プロトコルを定義します。

@protocol SecondDelegate <NSObject>
@required
- (void) didSelectRows:(NSArray *)rows;
@end

@interface SecondTableViewController : UITableViewController
@property (retain) id<SecondDelegate> delegate;
@end

OriginalTableViewController で、プロトコルを実装します: .h:

@interface OriginalTableViewController : UIViewController <UITableViewDelegate, UITableViewDataSource, SecondDelegate>

.m:

- (void) didSelectRows:(NSArray *)rows {
    // Update the model with selected data and reload. Also pops/dismisses second table.
}

そして、SecondTableViewController をプッシュ/提示する直前にデリゲート プロパティを設定します。

SecondTableViewController *second = nil; // instantiate the vc some how
second.delegate = self;

SecondTableViewController.m で、save メソッドを実装します。

- (void) save {
    NSMutableArray *array = [NSMutableArray array];
    for (NSIndexPath *indexPath in [self.tableView indexPathsForSelectedRows]) {
        // Populate array with selected objects.
    }
    [self.delegate didSelectRows:array];
}

お役に立てれば。

于 2012-06-08T06:34:46.040 に答える