【问题标题】:xcode open url in second view controller based on button pressed in first view controller基于在第一个视图控制器中按下的按钮,xcode 在第二个视图控制器中打开 url
【发布时间】:2015-10-22 07:59:50
【问题描述】:

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

第一个 ViewController 有两个按钮。按下第一个按钮时,我想打开带有 Google 网址的 TargetViewController,按下第二个按钮时,我想打开带有 Yahoo 网址的相同 TargetViewController。

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

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

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

【问题讨论】:

    标签: ios objective-c xcode webview


    【解决方案1】:

    你应该在 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

    【讨论】:

      【解决方案2】:

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

      首先让我们为你的 segues 命名。为此,让我们打开情节提要并单击其中一个segue:

      然后可以在左侧面板中设置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";
          }
      }
      

      每当在您的视图控制器上启动 segue 时,都会调用此方法。因此,您可以在此处通过引用情节提要上设置的标识符来检查调用了哪个 segue。

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

      在这之后,你需要做的就是在你的 viewDidLoad @TargetViewController.m 中添加以下内容

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

      最后让我告诉你,这不是你可以遵循的最佳实践来完成这样的事情,但这是你所要求的,所以你去吧。希望对您有所帮助。

      【讨论】:

      • 感谢您的精彩解释。我收到错误“使用未声明的标识符 'TargetViewController'。但能够通过将 #import "TargetViewController.h" 添加到 ViewController.m 来修复它
      • 是的,那个需要放在里面,很抱歉错过了那个。但是,如果我是你,我会开始思考你怎么能只使用一个 segue 来完成这一切。我告诉你这是可能的:)
      【解决方案3】:

      thirdViewController *thirdView = [self.storyboard instantiateViewControllerWithIdentifier:@"third"]; [self.navigationController pushViewController:thirdView 动画:YES];

      【讨论】:

        【解决方案4】:
        - (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
        

        { [超级viewDidLoad];

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

        }

        【讨论】:

          【解决方案5】:

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

          在第一个 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中加载url,example

          其他传递参数的方式是here

          【讨论】:

            猜你喜欢
            • 2022-12-03
            • 2014-05-05
            • 1970-01-01
            • 1970-01-01
            • 2019-10-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多