4

詳細開示タップから詳細ビューコントローラにオブジェクトを渡すにはどうすればよいですか?これに対する推奨事項やクイックフィックスはありますか?理想的には、次のようなメソッドを作成したいと思います。

[self performSegueWithIdentifier:@"showDetail" sender:self passObject:object];

その理由は、「セグエの準備」は、詳細開示インジケーターの前のセルを押したときにのみ呼び出されるように見えるためです。以下のprepareの効果を作成するには、上記のようなメソッドをどのように作成しますか?

if ([[segue identifier] isEqualToString:@"showDetail"]) {
    NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
    id object = [_objects objectAtIndex:indexPath.row];
    [[segue destinationViewController] setDetailItem:object];
}

私はすでにそのようにUIStoryboardSegueのサブクラスを作成しようとしましたが、2つの問題が発生しました。

@implementation masterToDetail
-(void)performSegueWithIdentifier:(NSString*)identifier sender:(id)sender passObject:(id)object{
    [self.destinationViewController setDetailItem:object];
    [self performSegueWithIdentifier:identifier sender:sender];
}

-(void)performSegueWithIdentifier:(NSString*)identifier sender:(id)sender{
 //What code should go here? Issue one   
}

-(void)perform{
    //Second issue, the compiler will crash and say I need to override perform.
}
4

3 に答える 3

4

セグエアイデアのサブクラスを完全に捨てることで問題を修正しました。カスタム セグエを削除し、( tableviewcontrollre から) 詳細ビュー コントローラーにプッシュ セグエを作成しました。次に、インスタンス変数NSIndexPath* _ipath;を作成しました。コードは次のようになります。

- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath{
    _ipth = indexPath;
    [self performSegueWithIdentifier:@"showDetail" sender:self];
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    NSLog(@"prepping");
    if ([[segue identifier] isEqualToString:@"showDetail"]) {
        NSLog(@"in if");
        id object = [_objects objectAtIndex:_ipth.row];
        [[segue destinationViewController] setDetailItem:object];
    }
}

これにより、セグエが正しいセルに対して機能するように準備できます。

于 2012-06-25T21:26:50.340 に答える
1
  1. 絵コンテを開く

  2. マスター ビュー コントローラー - マスターを選択します。

  3. UITableViewCell から詳細ビュー コントローラーへのセグエを選択 - 詳細

  4. 属性インスペクタを開く

  5. 識別子 -> masterToDetail 書き込み

于 2012-07-27T02:49:43.663 に答える
0

テーブル ビュー セルを右クリックし、アクセサリ アクションから Ctrl キーを押しながらドラッグするだけです。

于 2014-07-16T19:46:47.237 に答える