在这里将我的第一个问题发布在stackoverflow上!希望我的问题清楚,这里是...
我在具有表视图的First View Controller中嵌入了一个导航控制器。从表视图中,我有一个segue可以推送到First Detail Controller。一切正常,segue将数据传递到First Detail Controller,但是我想再次从按钮推到Second Detail Controller。
情节提要中的布局如下图情节提要的图像
我设置了第二个Detail Controller,然后从第一个Detail Controller上的按钮将其推送到该控制器。但是我无法弄清楚如何将数组中的数据传递给Second Detail Controller。我添加了一条NSLog行,以查看正在传递的内容,并且调试面板正在输出“ (空) ”
这是我来自名为ColorBookViewController的.m First View Controller的viewdidload和segue代码:
- (void)viewDidLoad
{
[super viewDidLoad];
Color *color1 = [Color new];
color1.name = @"Red";
color1.hexnumber = @"FF0000";
color1.spanishname =@"Rojo";
Color *color2 = [Color new];
color2.name = @"Green";
color2.hexnumber = @"00FF00";
color2.spanishname =@"Verde";
Color *color3 = [Color new];
color3.name = @"Blue";
color3.hexnumber = @"0000FF";
color3.spanishname = @"Azul";
colors = [NSArray arrayWithObjects: color1,color2,color3, nil];
}
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"showColorDetail"]) {
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
ColorDetailViewController *destViewController = segue.destinationViewController;
destViewController.color = [colors objectAtIndex:indexPath.row];
}
}
这是从名为ColorDetailController的第一个细节控制器的.m加载的视图:
- (void)viewDidLoad
{
[super viewDidLoad];
NSLog(@"This is...%@", color.name);
self.nameLabel.text = color.name;
self.hexnumberLabel.text = color.hexnumber;
}
我的.h用于SecondDetailController:
#import <UIKit/UIKit.h>
#import "Color.h"
@interface SecondDetailViewController : UIViewController
@property (nonatomic,weak) IBOutlet UILabel *spanishnameLabel;
@property (nonatomic, strong) Color *color;
@end
这是从名为SecondDetailController的Second Detail Controller的.m中加载的视图:
- (void)viewDidLoad
{
[super viewDidLoad];
self.title = color.name;
NSLog(@"This is...%@", color.spanishname);
self.spanishnameLabel.text = color.spanishname;
}
该应用程序在模拟器中运行良好,但是我得到了Second Detail Controller的空白屏幕,并且从NSLog(@“ This is ...%@”,color.spanishname)中得到了“空”结果;
关于为什么segue通过并保留第一个详细视图而不是第二个详细视图的实例的任何建议?还是我在这里缺少更基本的东西?我尝试在First Detail Controller上设置第二个Segue,然后NSLog产生正确的结果(西班牙语中的颜色名称),但是我不确定如何将其传递给Second Detail Controller:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"showMoreDetail"]) {
NSLog(@"This is... %@",color.spanishname); //works fine
self.spanishnameLabel.text = color.spanishname; //throws error
}
}
感谢您的帮助或见识!
要将数据传递到第二个ViewController,只需执行与第一个ViewController完全相同的操作即可:Color
在segue中传递对象的引用。
在中SecondDetailViewController
,您已经具有color属性。您只需要使用在Color
中选择的同一对象设置此属性ColorBookViewController
。您已经在中有了此引用ColorDetailViewController
,只需SecondDetailViewController
通过segue将其直接传递给即可。
在您的内部ColorDetailViewController
:
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"showMoreDetail"]) {
SecondDetailViewController *destViewController = segue.destinationViewController;
destViewController.color = self.color;
}
}
现在,在的viewDidLoad
中SecondDetailViewController
,您将能够正确设置标签,例如self.spanishnameLabel.text = color.spanishname;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句