2015-10-22 73 views
0

这是初学者的问题。所以请耐心等待。我有两个视图控制器。基于第一视图控制器中按下的按钮,xcode在第二视图控制器中打开url

First ViewController有两个按钮。当第一个按钮被按下时,我想用URL打开TargetViewController到Google,当第二个按钮被按下时,我想用url打开相同的TargetViewController到Yahoo。

visualization of the problem

enter image description here

enter image description here

我已创建示范项目,你可以在这里下载:https://www.dropbox.com/s/uxjudu1hztyhmk2/Demo.zip?dl=0

如果你能帮助请简单的方式完成这与解释你做的每一步。如果你可以重新上传钓鱼和工作的例子,这将是很多的帮助。

我试着预览同一问题/问题的答案,但他们有多个错误,像我这样的初学者无法解决它们。谢谢。

回答

2

您应该设置赛格瑞的标识符故事板和执行的viewController:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    UIViewController* secondController = segue.destinationViewController; 
    if ([segue.identifier isEqualToString:@"first"]) 
    { 
     secondController.url = [NSURL URLWithString:@"firstURL"]; 
    } 
    else 
    { 
     secondController.url = [NSURL URLWithString:@"secondURL"]; 
    } 
} 

我更新项目... https://www.dropbox.com/sh/csilubh5ztndy0r/AADZ-hygEyNgINyUkod1TRo8a?dl=0

+1

感谢您的例子。它运作良好。 –

0

thirdViewController * thirdView = [self.storyboard instantiateViewControllerWithIdentifier:@“third”]; [self.navigationController pushViewController:thirdView animated:YES];

-1

这种方法有一个很大的优点,有在第一视图控制器不需要进口TargetViewController 。类之间的依赖性较小。

在第一视图控制器中添加代码:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
     if ([sender isKindOfClass:[UIButton class]]) { 
      NSString *urlString = ((UIButton *)sender).tag == 10 ? @"https://www.google.com" : @"https://www.yahoo.com/"; 
      if ([segue.destinationViewController respondsToSelector:@selector(setUrlString:)]) { 
       [segue.destinationViewController performSelector:@selector(setUrlString:) 
                 withObject:urlString]; 
      } 
     } 
    } 

在TargetViewController.h添加属性:

@property (nonatomic, strong) NSString *UrlString; 

它之后,你可以加载web视图的URL,example

的传递参数的其他方式是here

1

好吧,这是一个冗长的答案。但让我们看看:

首先让我们给你的名字命名。对于这一点,让去的故事板和做点击SEGUE之一:enter image description here

然后你可以设置在左侧面板上的SEGUE名称: enter image description here

一旦这样做了,做同样的第二轮。

所以现在我们可以确定当你点击按钮时将会调用哪个segue。

让我们去TargetViewController。H和声明如下属性:

@property(strong, nonatomic) NSString * urlString; 

一旦做到这一点,让我们进入ViewController.m并声明如下方法:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    TargetViewController * target = segue.destinationViewController; 
    if ([segue.identifier isEqualToString:@"GoogleSegueIdentifier"]) { 
     target.urlString = @"google"; 
    } else if ([segue.identifier isEqualToString:@"YahooSegueIdentifier"]) { 
     target.urlString = @"yahoo"; 
    } 
} 

这种方法将被调用,每当赛格瑞的inisiated上您的视图控制器。因此,您可以通过引用故事板上设置的标识符来检查哪个segue被调用。

因为你在TargetViewController上声明了这个“urlString”变量,所以你可以在这里设置它的值。

这一切,你需要做的是后添加以下你的viewDidLoad @ TargetViewController.m

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    if([self.urlString isEqualToString:@"google"]){ 
     //open the google URL 
    } else { 
     //open yahoo URL 
    } 
} 

在最后让我告诉你,这是不是你可以遵循,以获得最佳实践像这样做的东西,但这是你所要求的,所以你去。希望能帮助到你。

+0

谢谢你的好解释。我得到错误“使用未声明的标识符'TargetViewController'。但能够解决它与添加#import”TargetViewController.h“到ViewController.m –

+0

是的,那需要在那里,遗憾的是错过了一个。我是你,我会开始思考,你怎么能够用一个赛格来完成这一切,我告诉你这是可能的:) – dirtydanee

0
- (IBAction)first_button:(id)sender { 

thirdViewController *thirdview = [self.storyboard instantiateViewControllerWithIdentifier:@"third"]; 
[email protected]"first url"; 
[self.navigationController pushViewController:thirdView animated:YES]; 

}

- (IBAction)second_button:(id)sender { 

thirdViewController *thirdview = [self.storyboard instantiateViewControllerWithIdentifier:@"third"]; 
[email protected]"second url"; 
[self.navigationController pushViewController:thirdView animated:YES]; 

}

thirdViewcontroller.h

@property(strong,nonatomic)NSString *url_string; 



-(void)viewDidLoad 

{ [超级viewDidLoad中];

NSURL *url = [NSURL URLWithString:url_string]; 
//////// 

}

相关问题