我正在使用 IOS 5 和 Storyboard 编码。我构建了一个应用程序,其中我有一个 tableView 连接到带有搜索栏的 sqlite 数据库。 当我们触摸一行时,它会自动将我们带到另一个名为“Details”的 View Controller 。 我需要将数据从我的 TableView 传递到详细信息 View Controller ,例如将 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
最佳答案
出于演示目的,我假设我们有两个 View Controller ListViewController
和 DetailViewController
。 ListViewController 有 tableview,并且您已经创建了 tableview cell 和 details view controller 之间的 segue
。
我假设您将其命名为“DetailSegue”。您的 Storyboard应类似于下图。
选择 tableViewCell 和 DetailViewController 之间的 segue,打开属性检查器并将标识符指定为“DetailSegue”。见下图,
现在运行应用程序,您应该会看到从 ListViewController 到 DetailViewController 的平滑导航。
假设您的数据源是一个字符串数组,并且您已经为列表 tableView 正确设置了数据源和委托(delegate)
。
在你的 ListView Controller 中添加一个方法 prepareForSegue:sender ,这个方法将在 segue 即将执行时被调用。这个方法将被自动调用。
- (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 添加另一个导出以在 View 中显示标题。
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
不要忘记连接 socket 。我希望这能让您大致了解我们如何在 View Controller 之间传递数据。
关于ios - 在 View Controller 之间传递数据 : from uitableview to a details view controller,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11535915/