【发布时间】:2014-08-24 00:01:01
【问题描述】:
我可以根据代码中的另一个 segue 标识符来更改一个 segue 标识符吗?我什至不确定这是否是我想要做的正确问题。
我有一个ViewController,上面有很多按钮。
每个按钮都有一个到另一个ViewController 的segue,其中包含一些标签、图像和按钮。
这些标签、图像和按钮的文本/图像/标题由按下哪个 segue(前一个 ViewController 上的哪个按钮)决定。这是通过在初始 ViewController 中为每个属性分配一个变量并在第二个 ViewController 中分配该变量来完成的。
例如。 (我不会将 .h 和 .m 单独放在一个标题下!)
第一个 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),这两个 ViewControllers 也有 2 个按钮,它们分别链接到一个 tableViewController。 tableView 中显示的数据由前 2 个 viewController 的 segue ID 确定。
我相信我需要在第二组 viewController 上重复第一个过程(上面的代码),但同时更改前进/目标 viewController 的 segue ID,以便 tableView 可以加载正确的数据。如何更改此标识符?
我认为层次结构可能是更简单的解释方式。
根据之前的 ViewController 显示的内容,我将如何更改特定的 segue 标识符。请记住,每个级别都有许多不同的“链接”或指定属性。
【问题讨论】:
-
在您的层次结构中,假设您在第三行中有 viewController A 和 B。我看到他们都可以去 tableViewController,但你也想让它去另一个方向吗?例如,如果我从 A 加载 tableVC,您是否也想要一个选项返回到 B?
-
@AlexJ 不,不是因为 A 和 B 各自都有导航控制器。它们是第二行 ViewController 下的一种独立实体。我宁愿他们只是回到第二行viewController,然后选择从那里去B。
-
在那种情况下,你不能直接调用 [self.navigationController popViewControllerAnimated:YES] 吗?或者,如果你需要在 segue 中做一些特定的事情,你可以在你的 3rd ViewController 中有一个变量来识别你以前的 ViewController,然后在 segue 中做一个 if 语句
标签: ios objective-c cocoa-touch uiviewcontroller