xcode根据第一个视图控制器中按下的按钮在第二个视图控制器中打开URL

时间:2015-10-22 07:59:51

标签: ios objective-c xcode webview

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

第一个ViewController有两个按钮。当按下第一个按钮时,我想打开带有URL的TargetViewController给谷歌,当按下第二个按钮时,我想用url打开同一个TargetViewController给雅虎。

visualization of the problem

enter image description here

enter image description here

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

如果您能提供帮助,请以简单的方式完成此操作,并解释您所做的每一步。如果您可以重新上传钓鱼和工作示例,那将会有很多帮助。

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

5 个答案:

答案 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:enter image description here

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

完成此操作后,对第二个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