0

新しいアプリを作成していますが、アプリで 2 つのテーブルビューが必要です。1 つはリストを表示するためのもので、もう 1 つはユーザーがリストから選択したものを表示するためのものです。これまでのところ、アイテムを含む配列を作成し、ビューを相互に渡すことができました。他のテーブルビューに表示されている選択したアイテムを取得できないようです。

リストテーブルビューのコードを次に示します (「完了」がプッシュされるとデータが渡されます)。viewC は他のビューのインスタンスであり、それにアクセスするために使用されます。

-(IBAction)dismissValgScene {
for (int i = 0; i < ValgteMedierarray.count; i++) {
    NSLog(@"%@", [ValgteMedierarray objectAtIndex:i]);
}
viewC.TilvalgteMedierArray = [NSMutableArray arrayWithArray:ValgteMedierarray];
NSLog(@"1: antal i tilvalgteArray = %lu", (unsigned long)viewC.TilvalgteMedierArray.count);
[viewC.tableView reloadData];
NSLog(@"2: antal i tilvalgteArray = %lu", (unsigned long)viewC.TilvalgteMedierArray.count);
[self dismissViewControllerAnimated:YES completion:nil];
}

これは、選択した項目を別のビューの配列に追加する [完了] ボタンのメソッドです。(それは viewC.TilvalgteMediaArray です)

選択したアイテムを表示する必要がある他のビューのコードを次に示します。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
return [TilvalgteMedierArray count];
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];

if (!cell) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"];
    [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
}

// Configure the cell...
cell.textLabel.text = [TilvalgteMedierArray objectAtIndex:indexPath.row];

return cell;
}

みなさんが助けてくれることを願っています.

(これが他の場所で回答されている場合はお詫びしますが、解決策が見つからないまま何時間も探していました)。


編集:

私を助けようとしてくれたすべての人に感謝します。:)

Unwind Segue メソッドを使用して解決策を見つけました。同様の問題を抱えている人は誰でも、次のリンクを見ることができます。

アンワインド セグエの作成方法: アンワインド セグエ とは何ですか? また、どのように使用しますか?

アンワインド セグエでデータを渡す方法: iOS 6 - セグエをアンワインドするときにデータを返すことはできますか?

4

2 に答える 2

0

ValgViewController はChoiceまたはSelectionテーブル ビュー コントローラーであり、マスター テーブル ビュー コントローラー内に表示されるメディア タイプをユーザーが選択できるようにします。

マスター テーブル ビュー コントローラーが、ValgViewController からユーザーが選択した選択肢の配列を受け取るようにします。

そのためには、デリゲート プロトコルを ValgViewController ヘッダー内で定義し、マスター テーブル ビュー コントローラーがそのプロトコルに準拠する必要があります。

例として、ValgViewController ヘッダー ファイル内に次を追加します。

@protocol ValgViewControllerDelegate <NSObject>
-(void)syncChoicesWithArray:(NSArray *)arrayToSync;
@end

@interface ValgViewController : UITableViewController
@property (nonatomic, assign) id <ValgViewControllerDelegate> delegate;
@property (nonatomic, strong) NSMutableArray *MedieValgListeArray, *ValgteMedierarray;
@end

ValgViewController.m 内では、ValgViewController DoneまたはCompleteボタンが次のように接続されます。

-(IBAction)actionSelectionCompleted:(id)sender {

    [self.delegate syncChoicesWithArray:ValgteMedierarray];
    // [mc.self sync:ValgteMedierarray];
    // [self dismissViewControllerAnimated:YES completion:nil];

}

MasterViewController.m ファイル内に、以下を追加して、MasterViewController にプロトコルを採用させます。

@interface MasterViewController () <ValgViewControllerDelegate>{
    // no need for this if performing segues
    // ValgViewController *valgV;
}
@end

次に、デリゲート プロトコルを次のように実装します。

#pragma mark - ValgViewController Delegate methods

-(void)syncChoicesWithArray:(NSArray *)arrayToSync{
    // Dismiss the ValgViewController model from here
    [self dismissViewControllerAnimated:YES completion:nil];

    TilvalgteArray = arrayToSync;
    NSLog(@"valgte = %i", arrayToSync.count);
    NSLog(@"tilvalgte = %i", TilvalgteArray.count);
    NSLog(@"%@", [TilvalgteArray objectAtIndex:0]);
    [self.tableView reloadData];

}

prepareForSegue メソッド内で、マスター テーブル ビュー コントローラーを ValgViewController のデリゲートとして追加します。

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString: @"showTilvalgteMedierScene"])
    {
        ValgViewController *vc = [segue destinationViewController];
        vc.delegate = self;
        vc.TilvalgteMedierArray = [NSMutableArray arrayWithArray:ValgteMedierarray];
    }
}
于 2013-09-29T03:27:46.037 に答える
-1

ここに欠けているのは、適切なプロトコル/デリゲート パターンであると確信しています。

干渉してはならない別のビューで配列とプロパティを参照しています。各ビューを、それ自身の問題を管理するように制限します。

プロトコルを作成し、初期ビューをデリゲートにして、選択の変更または doneTouched に応答します。したがって、基本的に、選択ビューは選択を監視および変更し、変更が行われたときまたは終了したときに関心のある人に報告するだけです。このビューは、デリゲートがそこから何をするかを認識したり気にしたりしてはなりません。

デリゲートとプロトコルについて読んでください。

デリゲートとデータソース

プロトコル

于 2013-09-29T11:57:59.217 に答える