0

マスター/詳細ビュー タイプのアプリで詳細ビューをリセットするにはどうすればよいですか? たとえば、私のマスター ビューは単に名前を一覧表示するだけで、名前を選択すると、選択した人物の詳細が表示されます。アプリケーションが行うこと。ただし、詳細ビューから「戻る」ボタンを押して別の名前を選択すると、詳細ビ​​ューは最初に選択した項目のままになります。詳細ビューをリセットして、選択したものの詳細が表示されるようにするにはどうすればよいですか?

私はdetailviewcontrollerにこれを持っています(プロファイルはクラスです):

-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil title:(NSString *)name details:(Profile *)profile{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        self.title = NSLocalizedString(@"Detail", @"Detail");

        NSLog(@"Details: %@", [profile lastName]);
        _detailProfile = profile;

    }
    return self;
}

そして、これは私のmasterviewcontrollerにあります:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (!self.detailViewController) {
        //self.detailViewController = [[MediaDirectoryDetailViewController alloc] initWithNibName:@"MediaDirectoryDetailViewController" bundle:nil];

        _showProfile = [_profileArray objectAtIndex:indexPath.row];

        self.detailViewController = [[MediaDirectoryDetailViewController alloc] initWithNibName:@"MediaDirectoryDetailViewController" bundle:nil title:@"Detail" details:_showProfile];
    }
    NSDate *object = _objects[indexPath.row];
    self.detailViewController.detailItem = object;
    [self.navigationController pushViewController:self.detailViewController animated:YES];
}

受け取った回答から編集

Ok。detailProfile は詳細ビュー コントローラのプロパティであり、メソッドを作成しました。

@property (strong, nonatomic) Profile *detailProfile;
-(void)setDetailProfile:(Profile *)profile;

次のように実装されます。

-(void)setDetailProfile:(Profile *)profile{
    NSLog(@"Going to display profile: %@, %@", [profile lastName], [profile firstName]);

    [firstName setText:[profile firstName]];
    [lastName setText:[profile lastName]];
}

なんらかの理由で、ラベルの firstName と lastName が更新されていません。

マスターで次のことを行いました。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (!self.detailViewController) {
        //self.detailViewController = [[MediaDirectoryDetailViewController alloc] initWithNibName:@"MediaDirectoryDetailViewController" bundle:nil];

        _showProfile = [_profileArray objectAtIndex:indexPath.row];

        NSLog(@"Profile selected last name: %@", [_showProfile lastName]);

       // self.detailViewController = [[MediaDirectoryDetailViewController alloc] initWithNibName:@"MediaDirectoryDetailViewController" bundle:nil title:@"Detail" details:_showProfile];

        self.detailViewController = [[MediaDirectoryDetailViewController alloc] initWithNibName:@"MediaDirectoryDetailViewController" bundle:nil title:@"Detail"];

        self.detailViewController.detailProfile = _showProfile;
    }
    NSDate *object = _objects[indexPath.row];
    self.detailViewController.detailItem = object;
    [self.navigationController pushViewController:self.detailViewController animated:YES];
}

詳細ビューから戻った後、新しいアイテムが選択されたときにログへの出力が更新されず、ラベルが更新されます。

4

1 に答える 1

0

が詳細ビューコントローラのプロパティでない場合detailProfileは、プロパティに変換します。独自のsetDetailProfileメソッドを作成し、そこで、新しいプロファイルを取得するときに必要な詳細コントローラー(および画面)のすべてを更新します。viewWillAppear(現在どこでそれを行っているかはわかりませんが、おそらくコードをviewDidAppear何かから移動することができます。)

プロファイルパラメータを必要としないようにinitメソッドを変更してから、マスターを次のように変更します。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (!self.detailViewController) {
        self.detailViewController = [[MediaDirectoryDetailViewController alloc] initWithNibName:@"MediaDirectoryDetailViewController" bundle:nil title:@"Detail"];
    }
    _showProfile = [_profileArray objectAtIndex:indexPath.row];
    self.detailViewController.detailProfile = _showProfile;

    NSDate *object = _objects[indexPath.row];
    self.detailViewController.detailItem = object;
    [self.navigationController pushViewController:self.detailViewController animated:YES];
}

編集:

iPhoneの場合。分割ビューがないため、カスタムsetDetailProfileメソッドの作成に関する部分は無視してください。代わりに、プロパティを上記のように設定しますが、を使用self.detailProfileして画面を更新しますviewWillAppear:

于 2012-10-13T19:17:49.520 に答える