Ios 将数据从视图控制器传递到第一个详图控制器,然后再传递到第二个详图控制器
在stackoverflow上发布我的第一个问题!希望我的问题很清楚,在这里 我在第一视图控制器中嵌入了一个导航控制器,该控制器具有一个表视图。从表视图中,我有一个序列,它推送到第一个细节控制器。一切正常,segue将数据传递到第一个细节控制器,但是我想再次从按钮推到第二个细节控制器 故事板中的布局如下所示 我设置了第二个细节控制器,并通过第一个细节控制器上的按钮按下。 但是,我不知道如何将数组中的数据传递给第二个细节控制器。我添加了一个NSLog行以查看传递的内容,调试面板正在输出“(null)” 以下是名为ColorBookViewController的.m第一个视图控制器中的viewdidload和segue代码:Ios 将数据从视图控制器传递到第一个详图控制器,然后再传递到第二个详图控制器,ios,uiviewcontroller,controller,Ios,Uiviewcontroller,Controller,在stackoverflow上发布我的第一个问题!希望我的问题很清楚,在这里 我在第一视图控制器中嵌入了一个导航控制器,该控制器具有一个表视图。从表视图中,我有一个序列,它推送到第一个细节控制器。一切正常,segue将数据传递到第一个细节控制器,但是我想再次从按钮推到第二个细节控制器 故事板中的布局如下所示 我设置了第二个细节控制器,并通过第一个细节控制器上的按钮按下。 但是,我不知道如何将数组中的数据传递给第二个细节控制器。我添加了一个NSLog行以查看传递的内容,调试面板正在输出“(null
- (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];
}
}
- (void)viewDidLoad
{
[super viewDidLoad];
NSLog(@"This is...%@", color.name);
self.nameLabel.text = color.name;
self.hexnumberLabel.text = color.hexnumber;
}
#import <UIKit/UIKit.h>
#import "Color.h"
@interface SecondDetailViewController : UIViewController
@property (nonatomic,weak) IBOutlet UILabel *spanishnameLabel;
@property (nonatomic, strong) Color *color;
@end
- (void)viewDidLoad
{
[super viewDidLoad];
self.title = color.name;
NSLog(@"This is...%@", color.spanishname);
self.spanishnameLabel.text = color.spanishname;
}
- (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
}
}
以下是从名为ColorDetailController的第一个细节控制器的.m加载的视图:
- (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];
}
}
- (void)viewDidLoad
{
[super viewDidLoad];
NSLog(@"This is...%@", color.name);
self.nameLabel.text = color.name;
self.hexnumberLabel.text = color.hexnumber;
}
#import <UIKit/UIKit.h>
#import "Color.h"
@interface SecondDetailViewController : UIViewController
@property (nonatomic,weak) IBOutlet UILabel *spanishnameLabel;
@property (nonatomic, strong) Color *color;
@end
- (void)viewDidLoad
{
[super viewDidLoad];
self.title = color.name;
NSLog(@"This is...%@", color.spanishname);
self.spanishnameLabel.text = color.spanishname;
}
- (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
}
}
第二个DetailController的My.h:
- (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];
}
}
- (void)viewDidLoad
{
[super viewDidLoad];
NSLog(@"This is...%@", color.name);
self.nameLabel.text = color.name;
self.hexnumberLabel.text = color.hexnumber;
}
#import <UIKit/UIKit.h>
#import "Color.h"
@interface SecondDetailViewController : UIViewController
@property (nonatomic,weak) IBOutlet UILabel *spanishnameLabel;
@property (nonatomic, strong) Color *color;
@end
- (void)viewDidLoad
{
[super viewDidLoad];
self.title = color.name;
NSLog(@"This is...%@", color.spanishname);
self.spanishnameLabel.text = color.spanishname;
}
- (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
}
}
该应用程序在模拟器中运行良好,但我得到了第二个细节控制器的空白屏幕,并且我从NSLog中得到了“null”结果(@“This…%@”,color.spanishname)
关于segue为什么传递并保持第一个细节视图而不是第二个细节视图的实例,有什么建议吗?还是我遗漏了一些更基本的东西?我尝试在第一个细节控制器上设置第二个segue,NSLog生成正确的结果(西班牙语中的颜色名称),但我不确定如何将其传递到第二个细节控制器:
- (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];
}
}
- (void)viewDidLoad
{
[super viewDidLoad];
NSLog(@"This is...%@", color.name);
self.nameLabel.text = color.name;
self.hexnumberLabel.text = color.hexnumber;
}
#import <UIKit/UIKit.h>
#import "Color.h"
@interface SecondDetailViewController : UIViewController
@property (nonatomic,weak) IBOutlet UILabel *spanishnameLabel;
@property (nonatomic, strong) Color *color;
@end
- (void)viewDidLoad
{
[super viewDidLoad];
self.title = color.name;
NSLog(@"This is...%@", color.spanishname);
self.spanishnameLabel.text = color.spanishname;
}
- (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中完全相同的操作:传递segue中
Color
对象的引用
在SecondDetailViewController
中,您已经有了颜色属性。您只需使用在ColorBookViewController
中选择的相同Color
对象设置此属性。由于您在ColorDetailViewController
中已经有此引用,只需通过segue将其直接传递给SecondDetailViewController
在ColorDetailViewController中
:
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"showMoreDetail"]) {
SecondDetailViewController *destViewController = segue.destinationViewController;
destViewController.color = self.color;
}
}
现在,在
SecondDetailViewController
的viewDidLoad
中,您可以正确设置标签,如在self.spanishnameLabel.text=color.spanishname
将颜色数组中的对象传递到第二个VC中的Color
。什么是颜色
?