【问题标题】:Perform segue with accessoryButton使用附件按钮执行 segue
【发布时间】:2013-04-01 16:03:01
【问题描述】:

我正在做主页面 + 详细页面。我已成功点击母版页中的单元格行跳转到详细信息页,使用下面的代码

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

但是因为我的母版页单元格行也有辅助按钮,我需要使这些按钮也能够通过点击跳转到详细信息页面。所以我实现了代码

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

但是显示的详细信息不正确。它始终显示数据列表中的第一个详细数据。我将 sender:self 更改为 sender:indexPath 也不起作用。

我使用了来自 herehere 的 stackoverflow 答案。我是初学者,所以有些概念还不清楚对不起。

已编辑 -为masterviewcontroller.m准备segue

- (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

【问题讨论】:

  • 请粘贴您的代码如何在详细页面中显示数据。
  • 我已经这样做了,谢谢您的回复
  • 为什么不在附件ButtonTapped 上调用 didSelect 然后使用 indexPath?

标签: xcode uitableview


【解决方案1】:

这是由于以下陈述

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

在此self.tableView.indexPathForSelectedRow.row 仅适用于行选择 不适用于附件按钮点击。

你可以通过两种简单的方法来解决它

  1. 在 .h 文件中声明一个变量来存储 indexPath 并使用它来传递选定的 indexPath。
  2. 在发件人中传递 indexPath

一切顺利..

【讨论】:

    猜你喜欢
    • 2015-09-28
    • 2013-07-17
    • 2012-08-14
    • 1970-01-01
    • 1970-01-01
    • 2012-06-30
    • 1970-01-01
    • 1970-01-01
    • 2012-07-07
    相关资源
    最近更新 更多