如何从故事板内的表格视图调用详细视图

问题描述:

我有以下问题。如何从故事板内的表格视图调用详细视图

我已经创建了一个基于选项卡的应用程序与三个视图和Viewcontroller。 FirstView(开始屏幕的东西),SecondView(详细页面),ThirdView(列表项目表)。 (故事板的连接自动设置)。

在第三个视图中,整合了一个表格并且内容显示正常。

现在我想调用SecondView,当表中的一行被选中时。

我也尝试添加一个第四视图,tabBar控制器之外,以获取Detailview,但这也没有帮助。

我已经尝试了几个教程和论坛提示,但无法让它工作。

该类设置为正确的ViewController,标识符设置为detail。

-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ 
DetailViewController *detail = [self.storyboard instantiateViewControllerWithIdentifier:@"detail"]; 
[self.navigationController pushViewController:detail animated:YES]; 
detail.label1.text = @"It is working"; 

}

当行点击,就变成蓝色,但没有任何反应。没有错误消息,没有。

希望你能帮助:-)


OK,我曾经试图 “优化” 我的设计。

仍然有基于选项卡的视图,但是当点击表格中的一行时,应该会出现一个新的(未在故事板中链接)视图来显示所选报价的详细信息。

  1. 我已经建立在故事板的图,将其称为“detailzitat”
  2. 我已经创建了一个DetailViewController.h /米作为UIViewController类
  3. 我已自定义类设置为DetailViewController
  4. 我导入ThirdViewController.h中的DetailViewController.h

我相应地修改了ThirdViewController.h中的didSelectRowAtIndexPath方法。

-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ 
DetailViewController *detailVC = [self.storyboard instantiateViewControllerWithIdentifier:@"detailzitat"]; 

[self.navigationController pushViewController:detailVC animated:YES]; 

}

和我DetailViewController.m看起来像

#import "DetailViewController.h" 
@implementation DetailViewController 
@synthesize label1, labeltext; 

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
[email protected]"JUHU"; 
label1.text=labeltext; 
} 

但同样,没有任何反应,除了该行获得蓝色。

我不明白。如果我在非故事板项目中使用此代码,它正在工作。 我在做什么错?故事板中是否有这个组合的教程?还没有找到一个这种方法。 尝试从网上的不同教程学习,但最大的问题是,大多数不是iOS5的,我不擅长转移。

希望能得到一些提示:-)

你可能想考虑一下你的设计。如果我正确理解你的描述,用户将在第三个选项卡上,点击表格中的一行,然后你将切换回第二个选项卡。导航控制器可能是一个更自然,更容易混淆的选择。

但在任何情况下,这样的事会工作有时

-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ 

    DetailViewController *detailVC = [self.tabBarController.viewControllers objectAtIndex:1]; 

    detailVC.label1.text = @"It is working"; // <- this will not work consistently! 

    self.tabBarController.selectedViewController = detailVC; 

} 

这样做的问题是,虽然用户是第三个选项卡上,它可能是第二个选项卡视图控制器的观点是卸载(例如由于内存压力)。

也有可能用户从标签1立即到标签3,因此第二标签的视图甚至没有加载。 (甚至要测试上面的代码,你必须选择标签2然后标签3.)

如果第二个选项卡的视图层次结构未加载,label1属性将为零,因此这将不起作用。更好的策略是在DetailViewController上创建一个新的类型为NSString *的@property。并设置属性,而不是试图直接设置label1。

然后在您的viewWillAppear:为DetailViewController您可以根据需要更新您的标签。当然,您可以确定label1已加载并连接到正确的UILabel。

我希望有帮助。

+0

首先“谢谢”:-)你做了我的一天。好吧,问题是,试图映射不同的教程来把事情放在一起,我认为;-))然而,我只是试图弄清楚,事情是如何工作的。我的应用程序的“方法”如下。有一个报价的应用程序。在“第二视图”中,您可以获得随机报价,并且该视图被格式化以显示报价。在“第三视图”中,您将有一张列出所有报价单的表格。如果你点击一行,就会出现“DetailView/2nd View”。你有没有建议更好的解决方案,而不是两次布局相同的观点? – Ssernengreiferin 2011-12-15 06:56:46

我认为问题出在self.navigationController。如果您的视图不在导航控制器内,则不起作用。所以你要做的是在那里创建一个新的导航控制器对象,然后用它来显示你的详细视图。