我有以下问题。
我创建了一个基于选项卡的应用程序,其中包含三个视图和Viewcontroller。 FirstView(开始屏幕内容),SecondView(详细信息页面),ThirdView(列表项目表)。 (自动设置故事板的连接)。
在第三个视图中,集成了一个表格并且内容显示正常。
现在我想在选择表格中的一行时调用SecondView。
我还尝试在tabBar Controller之外添加一个View来获取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";
}
单击该行时,它变为蓝色,但没有任何反应。没有错误消息,没有。
希望你能提供帮助: - )
好的,我已经尝试过"优化"我的设计。
仍然有基于标签的视图,但是当点击表格中的一行时,应该会出现一个新的(未在故事板中链接)视图来显示所选报价的详细信息。
我相应地修改了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];
labeltext=@"JUHU";
label1.text=labeltext;
}
但是再一次,没有任何反应,除了行变蓝。
我不明白。如果我在非故事板项目中使用此代码,它正在工作。 我究竟做错了什么 ?在Storyboards中是否有任何关于此组合的教程?尚未找到这种方法。 尝试从网上的不同教程中学习,但最大的问题是,大多数不适用于iOS5,我转移的时候不太好。
希望得到一些提示:-)
答案 0 :(得分:1)
您可能想要考虑一下您的设计。如果我正确理解您的描述,用户将在第三个选项卡上,点击表格中的一行,然后您将它们切换回第二个选项卡。导航控制器可能是一种更自然,更不容易混淆的选择。
但无论如何,像这样的东西会有效 :
-(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属性将为nil,因此这将不起作用。更好的策略是在DetailViewController上创建一个类型为NSString *的新@property。并设置那个属性,而不是尝试直接设置label1。
然后在viewWillAppear:
的DetailViewController中,您可以根据需要更新标签。当然,您可以确保label1已加载并连接到正确的UILabel。
我希望有所帮助。
答案 1 :(得分:0)
我认为问题出在self.navigationController上。如果您的视图不在导航控制器内,则无效。所以你要做的是在那里创建一个新的导航控制器对象,然后用它来显示你的细节视图。