-3

これはおそらくかなり簡単ですが、今日はそれで行き詰まっています。アイデアは、ブラウザで uiwebview を作成し、ポップオーバーのアドレスバーを独自のクラスで暗示したいということです。ポップオーバー クラスから webview クラスへの UItextfield から URL を取得できますが、取得すると uiwebview が遅延し、読み込まれません。確認すると、デバッガーは webview が null であると言います。これはViewController.hです

#import <UIKit/UIKit.h>
#import "AdressBar.h"
#import "mypopoverController.h"
@interface ViewController : UIViewController<AddressbarDelegate>

{
    UIWebView* mWebView;

    mypopoverController *popoverController;



}
@property (nonatomic, retain) IBOutlet UIWebView* webPage;
@end

これは ViewController.m です:

    #import "mypopoverController.h"
    #import "MyOwnPopover.h"
    #import "ViewController.h"
    #import "AdressBar.h"
    @interface ViewController ()

    @end

    @implementation ViewController
    @synthesize webPage = mWebView;
    - (void)viewDidLoad
    {
        [super viewDidLoad];
addressBar = [[AdressBar alloc] init];
    addressBar.delegate = self;
        [edittext addTarget:self action:@selector(showPopoverAdressBar:forEvent:) forControlEvents:UIControlEventTouchUpInside];
        NSURL *url = [NSURL URLWithString:@"http://www.google.lv"];
        NSURLRequest *request = [NSURLRequest requestWithURL:url];
        [mWebView setScalesPageToFit:YES];
        [mWebView setDelegate:self];
        [mWebView loadRequest:request];
}


     -(void)loadReceivedAddress:(NSURLRequest *)url{
            NSLog(@"url= %@", url);//there url always is not null and mWebView should load it
            if(mWebView != nil){
                [mWebView loadRequest:url];
            }else{
                    NSLog(@"mWebView is null");//...but there it say's that it's null
                }}
-(void)showPopoverAdressBar:(id)sender forEvent:(UIEvent*)event
{
    AdressBar *popoverControllesr = [[AdressBar alloc]init];
    popoverControllesr.view.frame = CGRectMake(0,0, 600, 45);
    popoverControllesr.view.backgroundColor = [UIColor whiteColor];
    popoverController = [[mypopoverController alloc] initWithContentViewController:popoverControllesr];

    popoverController.cornerRadius = 20;
    if(_titles!=NULL){

        popoverController.titleText = _titles;}else{
            popoverController.titleText = @"Loading...";
        }
    popoverControllesr.address.text = absoluteString;



    popoverController.popoverBaseColor = [UIColor orangeColor];
    popoverController.popoverGradient= YES;

    popoverController.arrowPosition = TSPopoverArrowPositionHorizontal;
    [popoverController showPopoverWithTouch:event];

}
@end

これは AddressBar.h です

#import <UIKit/UIKit.h>
@protocol AddressbarDelegate <NSObject>
@required
-(void)loadSomethingFromAddressBar:(NSURLRequest*)request;
@end
@interface AdressBar : UIViewController{

IBOutlet UIButton *cancel;
}
@property (nonatomic, retain) IBOutlet UITextField *address;
@property (nonatomic, retain) NSURLRequest *request;
@property(nonatomic, weak) id <AddressbarDelegate> delegate;
@end

これは AddressBar.m です。

#import "AdressBar.h"
#import "ViewController.h"

@interface AdressBar ()

@end

@implementation AdressBar
@synthesize delegate = delegate;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}


- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    [_address setDelegate:self];
    _address.clearButtonMode =
    UITextFieldViewModeWhileEditing;
    _address.keyboardType = UIKeyboardTypeURL;
    [_address addTarget:self
                 action:@selector(loadAddresss)
      forControlEvents:UIControlEventEditingDidEndOnExit];
}
- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
- (void)loadAddresss {
    NSString* urlString = _address.text;
    NSURL* url = [NSURL URLWithString:urlString];
    if(!url.scheme)
    {
        NSString* modifiedURLString = [NSString stringWithFormat:@"http://%@", urlString];
        url = [NSURL URLWithString:modifiedURLString];
    }
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
     NSLog(@"request= %@", request);
    NSLog(@"text= %@", urlString);
   if (request!=nil) {

       if(delegate!=nil)
       {NSLog(@"delegate not nil");
           [delegate loadSomethingFromAddressBar:request];
       }else{
           NSLog(@"delegate is nil");//There delegate always is nil
       }

    }
}


    @end
4

2 に答える 2

0

Make sure that your web view Outlet & Delegate is correctly conncted.

私も同じ問題に直面しているため、URL アドレスの間にスペースはありません。その URL を Web ブラウザで開いてみてください。

于 2013-10-21T12:54:52.680 に答える