2013-08-31 106 views
0

我正在一个项目中,我打电话几个赛段而不是使用导航控制器。 在我的项目早些时候,我设置了一个模态segue,并从几个不同按钮的IBAction方法中调用它(我将同一个segue从不同的按钮中调用,因为我将一个字符串与segue一起传递)。在XCode 4中调用segue的正确方法是什么?

在我的故事板,它看起来是这样的:

UIButton with linked IBAction

Modal Segue with Custom Identifier

然后在我的代码,我这样做:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    NSLog(@"Vimeo Segue"); 
    if([segue.identifier isEqualToString:@"playVimeo"]) { 
     WebViewViewController *controller = (WebViewViewController *)segue.destinationViewController; 
     controller.vimeoURL = vimeoURL; 
    } 
} 

- (IBAction)launchCreativeFuture:(id)sender { 
    vimeoURL = @"72053500"; 
    [self performSegueWithIdentifier:@"playVimeo" sender:sender]; 
} 

这工作,我很高兴有了这个。然而...

我偶然发现了另一种做法,我很困惑,为什么他们都工作,并建议哪一个。

在这里,我添加了一个链接IBAction为和模态SEGUE,按照这些图片:

linked IBAction

modal segue identifier

我的代码如下所示:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if([segue.identifier isEqualToString:@"pushToGraduateCourses"]) { 
     NSLog(@"Grad Segue"); 
     UIViewController *controller = (UIViewController *)segue.destinationViewController; 
    } 
} 


- (IBAction)launchGraduate:(id)sender { 
    NSLog(@"Grad Button"); 
    [self performSegueWithIdentifier:@"pushToGraduateCourses" sender:sender]; 
} 

完全相同的代码方式,据我所知...除了当我这样做,我得到一个警告:“警告:尝试呈现时,而演示正在进行中!“ ...当我看着我的控制台时,“Grad Segue”记录了两次......这是有道理的,但在我的第一个示例中,“Vimeo Segue”只记录了一次。

我想我是问了几个问题:

一)任何人都可以发现这两种方法之间的区别?因为我不能。

b)从Interface Builder自动调用performSegueWithIdentifier而不必以编程方式从链接到该按钮的IBAction调用它,那么创建一个segue?

c)建议采用哪种方式?

由于提前,

〜杰西

回答

2

答:是的

B.是的,当你从按钮创建一个SEGUE,该按钮调用performSegueWithIdentifier。

C.在我看来,你应该在故事板中尽可能多地进行UI设计,如果你需要根据代码来更新你的UI,那么只需要进入代码。防爆。如果用户是应用程序中的管理员,那么您会想要跳到不同的设置页面而不是标准用户。

+0

干杯,谢谢凯文,这有助于... –

+1

那么,@ jesses.co.tt。如果这有帮助,它是否回答你的问题?如果是的话,给它一个很好的,大的,胖的,绿色的复选标记。 :) – CaptJak

+0

是的,我刚刚做到了。我很犹豫,它只回答2/3的问题,但我想我不应该在一个问中提出三个问题! –

相关问题