在视图控制器之间传递数据:从uitableview到详细信息视图控制器

我正在使用IOS 5和故事板编码。 我已经build立了一个应用程序,我有一个tableView连接到一个search栏的SQLite数据库。 当我们触摸一行时,它会自动将我们带到另一个名为“Details”的视图控制器。 我需要将数据从我的表视图传递给详细信息视图控制器,例如将author.title传递给labelText.text字段。 有任何想法吗?

编辑的问题:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ // NSString *Title; Details *dv = (Details*)segue.destinationViewController; author.title = dv.labelText.text; } 

部分代码:

 // // Details.m // AuthorsApp // // Created by georges ouyoun on 7/17/12. // Copyright (c) 2012 __MyCompanyName__. All rights reserved. // #import "Details.h" #import "Author.h" @interface Details () @end @implementation Details @synthesize labelText; @synthesize selectedAuthors; @synthesize author; - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization } return self; } - (void)viewDidLoad { [super viewDidLoad]; self.labelText.text = self.author.title; // Do any additional setup after loading the view. NSLog(@"Everything is ok now !"); } - (void)viewDidUnload { // [self setLabelText:nil]; NSLog(@"U have entered view did unload"); [super viewDidUnload]; [self setLabelText:Nil]; // Release any retained subviews of the main view. } - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ // NSString *Title; Details *dv = (Details*)segue.destinationViewController; // author.title = dv.labelText.text; dv.labelText.text = author.title; } /* - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ if ([segue.identifier isEqualToString:@"AuthorsCell"]) { [segue.destinationViewController setLabelText:author.title]; } } /* -(void)viewWillAppear:(BOOL)animated { self.labelText.text = author.title; NSLog(@"U have entered the viewWillAppear tag"); // detailsLabel.text = food.description; } */ - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return YES; } - (void)dealloc { [labelText release]; [super dealloc]; } @end 

为了演示目的,我将假设我们有两个视图控制器ListViewControllerDetailViewController 。 ListViewController有tableview,你已经segue between your tableview cell and details view controller创build了一个segue between your tableview cell and details view controller

我假设你把它命名为“DetailSegue”。 你的故事板应该看起来类似于下面的图片。

在这里输入图像说明

selecttableViewCell和DetailViewController之间的segue,打开属性检查器并将标识符指定为“DetailSegue”。 看到下面的图片,

在这里输入图像说明

现在运行应用程序,您应该看到从ListViewController到DetailViewController的平滑导航。

Assuming you datasource is an array of stings and you have your datasource and delegate setup already properly for your list tableView

在List视图控制器中添加一个prepareForSegue:sender方法,当这个方法即将执行时,这个方法会被调用。这个方法将被自动调用。

 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([segue.identifier isEqualToString:@"DetailSegue"]) { DetailViewController *detailVC = (DetailViewController*)segue.destinationViewController; NSIndexPath *indexPath = [self.tableView indexPathForCell:(UITableViewCell *)sender]; detailVC.title = [self.source objectAtIndex:indexPath.row]; } } 

在DetailViewController中添加一个名为title的属性来存储选定的标题,并为UILabel添加另一个出口,以便在视图中显示标题。

DetailViewController.h

 #import <Foundation/Foundation.h> @interface RecipeListViewController : NSObject @property (weak, nonatomic) NSString *title; @property (weak, nonatomic) IBOutlet UILabel *titleLabel; @end 

DetailViewController.m

 @implementation RecipeListViewController - (void)viewDidLoad { [super viewDidLoad]; self.titleLabel.text = self.title; } @end 

不要忘了连接sockets。 我希望这给你一个关于如何在视图控制器之间传递数据的粗略想法。

是的,你需要使用

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

方法(覆盖)witch允许您通过获取segue.destinationViewController来传递细节,然后设置目标控制器的属性。

例如

 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ detailViewController *dv = (detailViewController*)segue.destinationViewController; dv.attribute1 = dataFromTable; } 

例如,如果你在数组中有你的表数据,一个简单的方法就是获取被推动的行的行号并将其设置为一个variables

 int rowPressed; - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ rowPressed = indexPath.row; } 

然后在PrepareForSegue中将数据传递给DetailViewController。 使用rowPressed从数据模型中获取相关数据。

希望这可以帮助!