我可以根据代码中的其他segue标识符更改segue标识符吗?我甚至不确定这是否是我正在寻找的正确问题。
我有一个ViewController
,上面有许多按钮。
每个按钮都有一个segue到另一个ViewController
,其中包含一些标签,图像和按钮。
这些标签,图像和按钮的文本/图像/标题由按下哪个segue(前一个ViewController上的哪个按钮)确定。这是通过在初始ViewController中为每个属性赋予变量并在第二个ViewController中分配该变量来完成的。
例如。 (我不会单独把.h和.m放在一个标题下!)
1st ViewController:
-(void) prepareForSegue: (UIStoryboardSegue*)segue sender:(id)sender{
if ([segue.identifier isEqualToString:@"someSegIdentifier"]){
2ndViewController *aVC = (2ndViewController *)(segue.destinationViewController);
aVC.TitleString = @"A Title";
aVC.FImg = [UIImage imageNamed:@"someimage.jpg";
aVC.Button1String = @"Button 1 Text";
aVC.Button2String = @"Button 2 Text";
etc...
} }
第二视图控制器:
@property (strong, nonatomic) UIImage *FImg;
@property (strong, nonatomic) NSString *TitleString;
@property (strong, nonatomic) NSString *Button1String;
@property (strong, nonatomic) NSString *Button2String;
@property (strong, nonatomic) IBOutlet UILabel *TitleLabel;
@property (strong, nonatomic) IBOutlet UIImageView *FImageView;
@property (strong, nonatomic) IBOutlet UIButton *Button1;
@property (strong, nonatomic) IBOutlet UIButton *Button2;
-(void)viewDidLoad
{
self.TitleLabel.text = self.TitleString;
self.FImageView.image = self.FImg;
[self.Button1 setTitle:self.Button1String forState:UIControlStateNormal];
[self.Button2 setTitle:self.Button2String forState:UIControlStateNormal];
}
从这个ViewController,每个按钮链接到另一个ViewController(它们都有NavControllers Embeded),这两个ViewControllers也有2个按钮,它们分别链接到tableViewController。 tableView中显示的数据由前两个viewControllers中的segue ID确定。
我相信我需要在第二组viewControllers上重复第一个进程(上面的代码),但同时更改进程/目标viewController的segue ID,以便tableView可以加载正确的数据。如何更改此标识符?
我认为层次结构可能是更容易解释它的方式。
我将如何根据之前的ViewController显示的内容更改特定的segue标识符。请记住,对于每个级别,它们是许多不同的“链接”或指定的属性。
是的,你肯定是在问错误的问题。你是为每个按钮创建一个segue?这是错误的方法,因为segue意味着在两个视图控制器之间。如果你有100个按钮,你会创建100个segues吗?在你的情况下,你有2个控制器,所以它应该只有一个segue。
如果您需要知道按下了哪个按钮,我建议您给发件人一个标签号,并在准备segue时进行检查。
您可以,而不是通过segue标识符从先前的控制器发送信息,在目标视图控制器上创建属性,并根据按下的按钮(或segue标识符)在segue TO视图控制器时更改这些属性。然后,当视图控制器中存在segue时,您将这些属性和segue标识符用作参数,而不仅仅是segue标识符。
e.g:
如果你去的是从控制器A到B到C,并且从A到B有3个可能的段和从B到C的3个可能的段,你可以在B中有一个NSString
属性就像
in A:
-(void) prepareForSegue: (UIStoryboardSegue*)segue sender:(id)sender{
if ([segue.identifier isEqualToString:@"identifier1"]){
2ndViewController *aVC = (2ndViewController *)(segue.destinationViewController);
aVC.propertyIWasTalkingAbout = "segue1"
}
else if ([segue.identifier isEqualToString:@"identifier2"]){
2ndViewController *aVC = (2ndViewController *)(segue.destinationViewController);
aVC.propertyIWasTalkingAbout = "segue2"
}
else if ([segue.identifier isEqualToString:@"identifier3"]){
2ndViewController *aVC = (2ndViewController *)(segue.destinationViewController);
aVC.propertyIWasTalkingAbout = "segue3"
}
}
在B:
-(void) prepareForSegue: (UIStoryboardSegue*)segue sender:(id)sender{
if ([segue.identifier isEqualToString:@"identifier4"]){
switch (self.propertyIWasTalkingAbout){
case("segue1"):
//...
break;
case("segue2"):
//...
break;
case("segue3"):
//...
break;
}
}
else if ([segue.identifier isEqualToString:@"identifier5"]){
switch (self.propertyIWasTalkingAbout){
case("segue1"):
//...
break;
case("segue2"):
//...
break;
case("segue3"):
//...
break;
}
}
else if ([segue.identifier isEqualToString:@"identifier6"]){
switch (self.propertyIWasTalkingAbout){
case("segue1"):
//...
break;
case("segue2"):
//...
break;
case("segue3"):
//...
break;
}
}
}
我在这里编写了所有这些代码,而不是在XCode上,所以可能会有一些错误,但我希望你能得到这个想法,我也希望得到你的意思:p