如何使用PerformSegueForIdentifier

问题描述:

我很新鲜的iOS和objective-c。我正在学习如何使用segues,特别是展开segue。如何使用PerformSegueForIdentifier

阅读时,我对'shouldPerformSegueForIdentifier'和'performSegueForIdentifier'的用法有点困惑。

我创建了一个例子包含了两个“ViewControllers”,“ViewController.m”,如图下面贴“VC_1”和“ServiceViewController”代码

我的问题是:

- 当又该如何我使用'performSegueForIdentifier'

- 当和如何使用'shouldIPerformSegueForIdentifier'?

VC_1

#import "ViewController.h" 
#import "ServiceViewController.h" 

@interface ViewController() 

@end 

@implementation ViewController 

- (void)viewDidLoad { 
[super viewDidLoad]; 
// Do any additional setup after loading the view, typically from a  
nib. 
} 


- (void)didReceiveMemoryWarning { 
[super didReceiveMemoryWarning]; 
// Dispose of any resources that can be recreated. 
} 

-(IBAction)btnStartService:(UIButton *)sender { 
    if (sender.tag == 1) { 
    NSLog(@"CLICKED"); 

    [self performSegueWithIdentifier:@"seguePassInterval" sender:(id) 
sender]; 
} 
} 

-(IBAction)btnExitApp:(UIButton *)sender { 
    NSLog(@"EXIT_CLICKED"); 

} 



- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"seguePassInterval"]) { 
    ((ServiceViewController*)segue.destinationViewController).data = @"testData"; //passing data to destinationViewController of type "TestViewController" 
    NSLog(@"SEGUE"); 
} 

} 


@end 

IMG

enter image description here

+0

对于shouldPerformSegueForIdentifier可以返回false它是决定是否应该执行具有指定标识符的segue。并为执行SegueForIdentifier使用它,您可以将数据从一个VC传递到另一个 –

+0

您可以请提供一个示例如何使用shouldPerformSegueForIdentifier? – user2121

+0

当你自己调用performSegueWithIdentifier时,shouldPerformSegueWithIdentifier不会被调用,因为可以假设你知道你在做什么。在调用performSegueWithIdentifier没有意义,但是然后返回NO从shouldPerformSegueWithIdentifier –

prepareForSegue方法被调用执行SEGUE权之前,并允许除其他事项外传递ViewController之间的数据,您可以通过示例检查您的segue的标识符是否为“XxX”并传递了一些数据,或者如果是“YYY”ca一种方法

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"seguePassInterval"]) { 
    ((TestViewController*)segue.destinationViewController).data = @"testData"; //passing data to destinationViewController of type "TestViewController" 
    NSLog(@"SEGUE"); 
} 
} 

方法performSegueWithIdentifier LL被用来作为他的名字说执行赛格瑞用他的标识,您可以执行赛格瑞当你需要它

最后shouldPerformSegue用于避免执行SEGUE如果您的应用程序在某些状态下,例如,如果你没有destinationViewController数据还没有,直到你得到

希望这有助于

+0

好..感谢..任何想法如何使用PerformSegueForIdentifier? – user2121

+0

@ user2121检查我的答案是否足够清楚 –

+0

1st.DestinationViewController未定义。 2nd.since prepareForSegue会自动调用,无论启动segue是一个按钮还是一个单元格,为什么我们需要执行SegueForIdentifier? – user2121