如何从故事板内的表格视图调用详细视图
我有以下问题。如何从故事板内的表格视图调用详细视图
我已经创建了一个基于选项卡的应用程序与三个视图和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,我曾经试图 “优化” 我的设计。
仍然有基于选项卡的视图,但是当点击表格中的一行时,应该会出现一个新的(未在故事板中链接)视图来显示所选报价的详细信息。
- 我已经建立在故事板的图,将其称为“detailzitat”
- 我已经创建了一个DetailViewController.h /米作为UIViewController类
- 我已自定义类设置为DetailViewController
- 我导入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。
我希望有帮助。
我认为问题出在self.navigationController。如果您的视图不在导航控制器内,则不起作用。所以你要做的是在那里创建一个新的导航控制器对象,然后用它来显示你的详细视图。
首先“谢谢”:-)你做了我的一天。好吧,问题是,试图映射不同的教程来把事情放在一起,我认为;-))然而,我只是试图弄清楚,事情是如何工作的。我的应用程序的“方法”如下。有一个报价的应用程序。在“第二视图”中,您可以获得随机报价,并且该视图被格式化以显示报价。在“第三视图”中,您将有一张列出所有报价单的表格。如果你点击一行,就会出现“DetailView/2nd View”。你有没有建议更好的解决方案,而不是两次布局相同的观点? – Ssernengreiferin 2011-12-15 06:56:46