【问题标题】:First uiwebview is showing url of second webview第一个 uiwebview 显示第二个 webview 的 url
【发布时间】:2015-08-26 14:42:52
【问题描述】:

说明:我的项目中有两个视图控制器。 (它们的两个类名都是 - ViewController)每个视图控制器都有一个 uiwebview。

当我测试应用程序时,第一个 uiwebview 会打开第二个 uiwebview 的 url 网页。 (第二个uiwebview url是http://google.com,第一个是http://test.bithumor.co/test26.php,所以第一个uiwebview打开http://google.com

这是 .m 文件中的代码

#import "ViewController.h"

@interface ViewController ()

@property (strong, nonatomic) IBOutlet UIWebView *webView;
@property (strong, nonatomic) IBOutlet UIWebView *webView2;

@end

@implementation ViewController

@synthesize scrollView;

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.
    draw1 = 0;
    scrollView.frame = CGRectMake(0, 300, 480, 55);
    [scrollView setContentSize:CGSizeMake(480, 55)];

    openMenu.frame = CGRectMake(220, 270, 60, 30);


    UIWebView *webview=[[UIWebView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width,self.view.frame.size.height)];

    NSString *url=@"http://test.bithumor.co/test26.php";
    NSURL *nsurl=[NSURL URLWithString:url];
    NSURLRequest *nsrequest=[NSURLRequest requestWithURL:nsurl];

    [webview loadRequest:nsrequest];

     webview.scrollView.bounces = NO;

    [self.view addSubview:webview];
    [self.view bringSubviewToFront:webview];
    [self.view bringSubviewToFront: openMenu];
    [self.view bringSubviewToFront: scrollView];


    // Do any additional setup after loading the view, typically from a nib.
    UIWebView *webview2=[[UIWebView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width,self.view.frame.size.height)];
    NSString *url2=@"http://google.com";
    NSURL *nsurl2=[NSURL URLWithString:url2];

    NSURLRequest *nsrequest2=[NSURLRequest requestWithURL:nsurl2];

    [webview2 loadRequest:nsrequest2];

    webview2.scrollView.bounces = NO;

    [self.view addSubview:webview2];
    [self.view bringSubviewToFront:webview2];
    [self.view bringSubviewToFront: openMenu];
    [self.view bringSubviewToFront: scrollView];

如何解决这个问题,以便每个 uiwebviews 打开他们指定的 url。

第一个网页浏览 - http://test.bithumor.co/test26.php

第二个网页浏览 - http://google.com

附加: 有人说我在一个 ViewController 中有两个插座,那在哪里以及如何修复它,以便每个 (2) 视图控制器上都有一个 webview。

【问题讨论】:

  • 仅供参考 - 不要删除和转发您的问题。那是不好的形式。如果您有更多信息,您应该更新上一个问题。
  • 你的解释是错误的。您发布了一个包含两个 Web 视图的视图控制器。
  • @rmaddy,怎么样,我不明白。它是两个视图控制器,每个控制器上有一个 webview。请告诉我它在一个视图控制器上的两个位置。
  • 它就在您发布的代码中。您有两个 Web 视图定义为这一视图控制器类中的属性。 viewDidLoad 方法创建并添加两个 web 视图,并将它们都添加到这个 ONE 视图控制器中。

标签: ios objective-c uiwebview


【解决方案1】:

rmaddy 的意思是你写的解释和代码显示的不一样。我知道您说您有两个视图控制器,但您只显示了一个的代码。您实际上是在创建一个视图,该视图直接位于另一个视图之上并且具有相同的尺寸。您将永远不会以这种方式看到下面的 Web 视图。如果你做这样的事情,你应该看到两个 webview,一个在另一个之上。这会告诉你那里确实有两个,但一个只是隐藏在另一个后面:

#import "ViewController.h"

@interface ViewController ()

@property (strong, nonatomic) IBOutlet UIWebView *webView;
@property (strong, nonatomic) IBOutlet UIWebView *webView2;

@end

@implementation ViewController

@synthesize scrollView;

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.
    draw1 = 0;
    scrollView.frame = CGRectMake(0, 300, 480, 55);
    [scrollView setContentSize:CGSizeMake(480, 55)];

    openMenu.frame = CGRectMake(220, 270, 60, 30);


    UIWebView *webview=[[UIWebView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width,self.view.frame.size.height/2)];

    NSString *url=@"http://test.bithumor.co/test26.php";
    NSURL *nsurl=[NSURL URLWithString:url];
    NSURLRequest *nsrequest=[NSURLRequest requestWithURL:nsurl];

    [webview loadRequest:nsrequest];

     webview.scrollView.bounces = NO;

    [self.view addSubview:webview];
    [self.view bringSubviewToFront:webview];
    [self.view bringSubviewToFront: openMenu];
    [self.view bringSubviewToFront: scrollView];


    // Do any additional setup after loading the view, typically from a nib.
    UIWebView *webview2=[[UIWebView alloc]initWithFrame:CGRectMake(0, self.view.frame.size.height/2, self.view.frame.size.width,self.view.frame.size.height/2)];
    NSString *url2=@"http://google.com";
    NSURL *nsurl2=[NSURL URLWithString:url2];

    NSURLRequest *nsrequest2=[NSURLRequest requestWithURL:nsurl2];

    [webview2 loadRequest:nsrequest2];

    webview2.scrollView.bounces = NO;

    [self.view addSubview:webview2];
    [self.view bringSubviewToFront:webview2];
    [self.view bringSubviewToFront: openMenu];
    [self.view bringSubviewToFront: scrollView];

编辑 1:

如果你真的想要两个不同的视图控制器,你需要这样做:

文件 1:

#import "ViewController.h"

@interface ViewController ()

@property (strong, nonatomic) IBOutlet UIWebView *webView;

@end

@implementation ViewController

@synthesize scrollView;

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.
    draw1 = 0;
    scrollView.frame = CGRectMake(0, 300, 480, 55);
    [scrollView setContentSize:CGSizeMake(480, 55)];

    openMenu.frame = CGRectMake(220, 270, 60, 30);


    UIWebView *webview=[[UIWebView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width,self.view.frame.size.height)];

    NSString *url=@"http://test.bithumor.co/test26.php";
    NSURL *nsurl=[NSURL URLWithString:url];
    NSURLRequest *nsrequest=[NSURLRequest requestWithURL:nsurl];

    [webview loadRequest:nsrequest];

     webview.scrollView.bounces = NO;

    [self.view addSubview:webview];
    [self.view bringSubviewToFront:webview];
    [self.view bringSubviewToFront: openMenu];
    [self.view bringSubviewToFront: scrollView];

文件 2:

#import "ViewController2.h"

@interface ViewController2 ()

@property (strong, nonatomic) IBOutlet UIWebView *webView;

@end

@implementation ViewController2

@synthesize scrollView;

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.
    draw1 = 0;
    scrollView.frame = CGRectMake(0, 300, 480, 55);
    [scrollView setContentSize:CGSizeMake(480, 55)];

    openMenu.frame = CGRectMake(220, 270, 60, 30);


    UIWebView *webview=[[UIWebView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width,self.view.frame.size.height)];

    NSString *url=@"http://www.google.com";
    NSURL *nsurl=[NSURL URLWithString:url];
    NSURLRequest *nsrequest=[NSURLRequest requestWithURL:nsurl];

    [webview loadRequest:nsrequest];

     webview.scrollView.bounces = NO;

    [self.view addSubview:webview];
    [self.view bringSubviewToFront:webview];
    [self.view bringSubviewToFront: openMenu];
    [self.view bringSubviewToFront: scrollView];

如果您使用的是故事板或 nib,那么您可能希望将每个视图控制器设置为不同的类。一个将设置为 ViewController,另一个将设置为 ViewController2

编辑 2:

要在一个文件中执行此操作,您可以执行以下操作:

ViewController.h:

...
@interface ViewController : UIViewController
@property (strong, nonatomic) NSString *urlString;
@end

ViewController.m:

#import "ViewController.h"

@interface ViewController ()

@property (strong, nonatomic) IBOutlet UIWebView *webView;

@end

@implementation ViewController

@synthesize scrollView;

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.
    draw1 = 0;
    scrollView.frame = CGRectMake(0, 300, 480, 55);
    [scrollView setContentSize:CGSizeMake(480, 55)];

    openMenu.frame = CGRectMake(220, 270, 60, 30);


    UIWebView *webview=[[UIWebView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width,self.view.frame.size.height)];

    NSURL *nsurl=[NSURL URLWithString:self.urlString];
    NSURLRequest *nsrequest=[NSURLRequest requestWithURL:nsurl];

    [webview loadRequest:nsrequest];

     webview.scrollView.bounces = NO;

    [self.view addSubview:webview];
    [self.view bringSubviewToFront:webview];
    [self.view bringSubviewToFront: openMenu];
    [self.view bringSubviewToFront: scrollView];

您展示 Web 视图控制器的文件:

...
ViewController *webViewController = [[ViewController alloc] init];
webViewController.urlString = @"http://www.google.com";
[self presentViewController:webViewController animated:YES completion:nil];

或者如果它是通过 segue 呈现的,你可以在 prepareForSegue 方法中设置 urlString 属性

...
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
   if ([segue.identifier isEqualToString:@"yourSegueIDHere"]) {
      ViewController *webViewController = (ViewController *)segue.destinationViewController;
      webViewController.urlString = @"http://www.google.com";
   }
}
...

【讨论】:

  • 那是新编辑的代码,我应该替换吗?
  • 是的,我只修改了两行,但您可以复制/粘贴整个部分。您应该可以通过这种方式看到这两个视图。
  • 它有效,但这不是我想要的样子。我想要它,每个单独的视图控制器上都有一个 webview
  • 是的,那么该代码看起来与上面的非常不同。这只是为了证明那里确实有两个。第一个没有加载错误的 URL,它只是被隐藏了。您是想要一个动态加载不同 URL 的视图控制器,还是真的要创建两个不同的视图控制器?
  • 我希望不同的视图控制器在每个控制器上加载不同的 uiwebview
【解决方案2】:

根据您的代码,有两种可能的情况: 第一:简单来说,您调用的 2 个 ViewControllers 实际上是 1 个具有两个视图的 ViewController,如果是这种情况,请添加功能以将您的一个放在前面。 第二:你实际上有两个控制器。如果您使用的是为两个 ViewController 附加的代码,那么您将始终在第一个 Web 视图前面拥有第二个 Web 视图。两者都加载了,但你可以看到上面的。

我希望这有助于确定问题。

【讨论】:

    猜你喜欢
    • 2017-08-06
    • 2019-12-12
    • 2022-08-13
    • 1970-01-01
    • 2017-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多