0

行をUITableView選択すると、タンクの詳細が表示される別のビューにセグエしたい...セグエが発生しますが、デリゲートはオブジェクトなどを送信しません...私は思うデリゲートが宣言/合成され、実装されている場所などにひねりを加えた私のズボンを持っています...

のヘッダー ファイルでデリゲートを宣言する場所は次のUITableViewControllerとおりです。

@class iTanksV2ListViewController;
@protocol iTanksV2ListViewControllerDelegate
- (void) iTanksListViewController:(iTanksV2ListViewController *) sender choseTank:(tank *)tank;
@end
@interface iTanksV2ListViewController : UITableViewController
@property (weak, nonatomic) id <iTanksV2ListViewControllerDelegate> delegate;
@end

そして、これは私がUITableViewControllersm ファイルに持っているものです:

@implementation iTanksV2ListViewController
@synthesize delegate = _delegate;

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.tankTableView.delegate = self;
    self.tankTableView.dataSource = self;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    self.selectedTank = [self.tanks objectAtIndex:indexPath.row];
    [self.delegate iTanksListViewController:self choseTank:self.selectedTank];
}

...そして、これがDetailViewController実装ファイルのデリゲート用のコードです...

@interface tankDetailViewController () <iTanksV2ListViewControllerDelegate>
@end

-(void)iTanksListViewController:(iTanksV2ListViewController *)sender choseTank:(id)tank
{
    self.tankToShow = tank;
}

他のすべての変数などは宣言されています。物事が明確になることを期待して、それらを省略しました-コードがコンパイルされ、セグエが発生しますが、デリゲートは何もしないようです!!!

4

1 に答える 1

1

あなたはセグエについて言及しているので、ストーリーボードを使用していると思います。それが本当なら、この目的のための代表者を忘れてください。デリゲートは、別のアクションを実行するオブジェクトであると想定されていますが、必要なのはデータ転送だけです。

代わりに、iTanksV2ListViewControllerクラスでprepareForSeque:メソッドを使用することをお勧めします。行がタップされたときにself.selectedTankを設定する行を保持しますが、prepareForSegueに次のようなものを入れます。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    tankDetailViewController *next = (tankDetailViewController *)[segue destinationViewController];
    next.tankToShow = self.selectedTank;
}
于 2012-03-29T11:51:19.820 に答える