2013-04-01 219 views
0

我正在做master + detail页面。我已经成功地拍打在母版页跳转到详细信息页面的细胞行,并使用下面用accessoryButton执行segue

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [self performSegueWithIdentifier:@"MasterToDetail" sender:indexPath]; 
} 

然而监守我的母版页电池行中的代码也有附件按钮,我需要能跳转到这些按钮详细页面也通过点击。所以我实施的代码

- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath 
{ 
    [self performSegueWithIdentifier:@"MasterToDetail" sender:self]; 
} 

细节显示不正确。它总是显示数据列表中的第一个详细数据。我改变了发件人:自我发送者:indexPath也没有工作。

我用过的stackoverflow回答从herehere。我是初学者,所以有些概念仍然没有明确的抱歉。

编辑 - preparesegue为masterviewcontroller.m

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    DetailViewController *detailController =segue.destinationViewController; 
    SearchDataDetail *bug = [self.bugs objectAtIndex:self.tableView.indexPathForSelectedRow.row]; 
    detailController.detailItem = bug; 


} 

-detailviewcontroller.m

#import "DetailViewController.h" 
#import "SearchData.h" 
#import "SearchDataDetail.h" 

@interface DetailViewController() 
- (void)configureView; 
@end 

@implementation DetailViewController 

- (void)configureView 
{ 
    // Update the user interface for the detail item. 
    self.rateView.notSelectedImage = [UIImage imageNamed:@"shockedface2_empty.png"]; 
    self.rateView.halfSelectedImage = [UIImage imageNamed:@"shockedface2_half.png"]; 
    self.rateView.fullSelectedImage = [UIImage imageNamed:@"shockedface2_full.png"]; 
    self.rateView.editable = YES; 
    self.rateView.maxRating = 5; 
    self.rateView.delegate = self; 

    if (self.detailItem) { 
     self.titleField.text = self.detailItem.data.title; 
     self.rateView.rating = self.detailItem.data.rating; 
     self.imageView.image = self.detailItem.fullImage; 
    } 

} 


- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 
    [self configureView]; 
} 

- (void)viewDidUnload 
{ 
    [self setTitleField:nil]; 
    [self setRateView:nil]; 
    [self setImageView:nil]; 
    [super viewDidUnload]; 
    // Release any retained subviews of the main view. 
    // e.g. self.myOutlet = nil; 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
} 

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 
} 

- (void)viewWillDisappear:(BOOL)animated 
{ 
    [super viewWillDisappear:animated]; 
} 

- (void)viewDidDisappear:(BOOL)animated 
{ 
    [super viewDidDisappear:animated]; 
} 


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    // Return YES for supported orientations 
    return YES; 
} 

- (void)rateView:(RateView *)rateView ratingDidChange:(float)rating { 
    self.detailItem.data.rating = rating; 
} 

@end 
+0

请粘贴您的代码如何在详细信息页面中显示的数据。 –

+0

我已经这样做了,谢谢你的回复 – onegun

+0

为什么不在didBind上调用accessoryButtonTapped然后使用indexPath? – Angelo

回答

0

这是由于下面的语句

SearchDataDetail *bug = [self.bugs objectAtIndex:self.tableView.indexPathForSelectedRow.row]; 

在这种self.tableView.indexPathForSelectedRow.row将仅适用于行选 不适用于accessoryButton tap。

您可以用两个简单的方法

  1. 声明在.h文件中的变量来存储indexPath,并用它来传递选定indexPath解决它。
  2. 通indexPath在发件人

所有最好的..