在UITableView上选择行时,委托不工作

时间:2012-03-29 11:15:46

标签: ios uitableview ios5 uistoryboardsegue

我有一个UITableView,当我选择一行时,我想要转到另一个视图,其中显示了坦克的详细信息... segue发生了,但是委托不发送对象等...我认为我的短裤在宣布/合成和实施代表的地方扭曲......

这是我在UITableViewController

的头文件中声明委托的地方
@class iTanksV2ListViewController;
@protocol iTanksV2ListViewControllerDelegate
- (void) iTanksListViewController:(iTanksV2ListViewController *) sender choseTank:(tank *)tank;
@end
@interface iTanksV2ListViewController : UITableViewController
@property (weak, nonatomic) id <iTanksV2ListViewControllerDelegate> delegate;
@end

这就是我在UITableViewControllers m文件中的内容:

@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;
}

所有其他变量等都被声明了,我把它们遗漏了希望它让事情更清楚 - 代码编译,而segue发生了但代表似乎没有做任何事情!!!

1 个答案:

答案 0 :(得分:1)

你提到segues所以我假设你正在使用故事板。如果这是真的,请忘记为此目的的代表。委托应该是一个为另一个执行某个操作的对象,但您需要的只是数据传输。

我建议在iTanksV2ListViewController类中使用prepareForSeque:方法。在点击一行时保留设置self.selectedTank的行,然后在prepareForSegue中输入类似的内容:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    tankDetailViewController *next = (tankDetailViewController *)[segue destinationViewController];
    next.tankToShow = self.selectedTank;
}