xcode打开第二个视图控制器中的URL基于第一个视图控制器中按下的button

这是初学者的问题。 所以请耐心等待。 我有两个视图控制器。

第一个ViewController有两个button。 当第一个button被按下,我想打开TargetViewController的URL到谷歌,当第二个button被按下,我想打开同样的TargetViewController与url到雅虎。

问题的可视化

在这里输入图像说明

在这里输入图像说明

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

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

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

你应该在storyboard中设置segue的标识符并在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

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

首先让你的名字命名。 为此,让我们去故事板,并点击其中一个segue: 在这里输入图像说明

然后你可以在左侧面板上设置segue的名字: 在这里输入图像说明

一旦完成,第二次继续执行相同的操作。

所以现在我们可以确定当你点击button时会调用哪个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"; } } 

这个方法将会被调用,每当在你的viewcontroller发生一个segue。 所以在这里你可以通过引用在故事板上设置的标识符来检查哪个segue被调用。

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

完成这一切后,您需要在viewDidLoad @ TargetViewController.m中添加以下内容

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

最后让我告诉你,这不是最好的做法,你可以按照这样做的东西,但这是你所要求的,所以你去。 希望能帮助到你。

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

 - (IBAction)first_button:(id)sender { thirdViewController *thirdview = [self.storyboard instantiateViewControllerWithIdentifier:@"third"]; thirdview.url_string=@"first url"; [self.navigationController pushViewController:thirdView animated:YES]; 

}

 - (IBAction)second_button:(id)sender { thirdViewController *thirdview = [self.storyboard instantiateViewControllerWithIdentifier:@"third"]; thirdview.url_string=@"second url"; [self.navigationController pushViewController:thirdView animated:YES]; 

}

thirdViewcontroller.h

 @property(strong,nonatomic)NSString *url_string; -(void)viewDidLoad 

{[super viewDidLoad];

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

}

这个方法有一大好处,在First ViewController中不需要导入TargetViewController。 类之间的依赖较less。

在第一个ViewController中添加代码:

 - (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]; } } } 

在Tar​​getViewController.h中添加属性:

 @property (nonatomic, strong) NSString *UrlString; 

之后你可以加载url在webview中, 例如

其他传递参数的方法在这里 。