这是初学者的问题。所以请耐心等待。我有两个视图控制器。
第一个ViewController有两个按钮。当按下第一个按钮时,我想打开带有URL的TargetViewController给谷歌,当按下第二个按钮时,我想用url打开同一个TargetViewController给雅虎。
我已经创建了可以在这里下载的演示项目:https://www.dropbox.com/s/uxjudu1hztyhmk2/Demo.zip?dl=0
如果您能提供帮助,请以简单的方式完成此操作,并解释您所做的每一步。如果您可以重新上传钓鱼和工作示例,那将会有很多帮助。
我尝试预览相同问题/问题的答案,但他们有多个错误,像我这样的初学者无法解决它们。谢谢。
答案 0 :(得分:2)
你应该在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
答案 1 :(得分:1)
这是一个冗长的答案。但是让我们看看:
首先让你的segues命名。为此,让我们去故事板并点击其中一个segue:
完成此操作后,对第二个segue执行相同的操作。
现在我们可以确定当您点击按钮时将调用哪个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。
因为你声明了这个" urlString" TargetViewController上的变量,因此你可以在这里设置它的值。
在此之后,您需要做的就是在viewDidLoad @ TargetViewController.m中添加以下内容
- (void)viewDidLoad {
[super viewDidLoad];
if([self.urlString isEqualToString:@"google"]){
//open the google URL
} else {
//open yahoo URL
}
}
最后让我告诉你,这不是最好的做法,你可以按照这样的方式来完成,但这就是你所要求的,所以你去了。希望它有所帮助。
答案 2 :(得分:0)
thirdViewController * thirdView = [self.storyboard instantiateViewControllerWithIdentifier:@" third"]; [self.navigationController pushViewController:thirdView animated:YES];
答案 3 :(得分:0)
- (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];
////////
}
答案 4 :(得分:-1)
这个方法有一个很大的优点,就是不需要在First ViewController中导入TargetViewController。课程之间的依赖程度较低。
在First 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];
}
}
}
在TargetViewController.h中添加属性:
@property (nonatomic, strong) NSString *UrlString;
之后你可以在webview中加载网址example
传递参数的其他方法是here。