【问题标题】:Why does my UIWebView not Allow User Interaction?为什么我的 UIWebView 不允许用户交互?
【发布时间】:2010-03-30 19:33:42
【问题描述】:

我是这些论坛的新手,所以我为我的菜鸟道歉。我尽我所能进行了彻底的搜索,但我找不到其他人遇到这个问题,如果其他地方已经涵盖了这个问题,请采纳。

我为我的问题创建了一个非常简单的示例。我确定我遗漏了一些东西,但我终生无法弄清楚是什么。

我正在创建一个 UIWebView 并将其添加到从 UIViewController 继承的自定义视图控制器中。当应用程序在 iPad 模拟器中加载时,uiwebview 会加载所需的页面,但 UIWebView 完全没有响应。 webview 不会平移或滚动,并且无法单击任何页内链接。但是,如果你突然改变 webview 的方向,一切都会正常。

提前感谢您的帮助!!

AppDelegate 标头


#import <UIKit/UIKit.h>
#import "EditorViewController.h"

@interface FixEditorTestAppDelegate : NSObject <UIApplicationDelegate> {
    UIWindow *window;
    EditorViewController *editorView;
}



    @property (nonatomic, retain) IBOutlet UIWindow *window;
    @property (nonatomic, retain) EditorViewController *editorView;

@end

AppDelegate 实现


#import "FixEditorTestAppDelegate.h"
#import "EditorViewController.h"



@implementation FixEditorTestAppDelegate



@synthesize window;
@synthesize editorView;




- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {   
    NSLog(@"application is loading");
    editorView = [[EditorViewController alloc] init];
    [window addSubview:[editorView view]];
    [window makeKeyAndVisible];
    return YES;
}




- (void)dealloc {
    [window release];
    [editorView release];
    [super dealloc];
}
@end

查看控制器标题


#import <UIKit/UIKit.h>


@interface EditorViewController : UIViewController <UIWebViewDelegate> {
    UIWebView *webView;
}



@property (nonatomic, retain) UIWebView *webView;




@end

查看控制器实现


#import "EditorViewController.h"



@implementation EditorViewController
@synthesize webView;



/*
// The designated initializer.  Override if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad.
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) {
        // Custom initialization
    }
    return self;
}
*/




// Implement loadView to create a view hierarchy programmatically, without using a nib.
- (void)loadView {
    NSLog(@"loadView called");

    UIView *curView = [[UIView alloc] init];

    webView = [[UIWebView alloc] init];
    webView.frame = CGRectMake(20, 40, 728, 964);
    webView.delegate = self;
    webView.backgroundColor = [UIColor redColor];

    [curView addSubview: webView];
    self.view = curView;

    [curView release];



}







//Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
    [super viewDidLoad];
    NSLog(@"viewDidLoad called");
    NSURL *url = [[NSURL alloc] initWithString:@"http://www.nytimes.com"];



    NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];
    [webView loadRequest:request];
    [url autorelease];
    [request release];



}



- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Overriden to allow any orientation.
    return YES;
}




- (void)didReceiveMemoryWarning {
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Release any cached data, images, etc that aren't in use.
}




- (void)viewDidUnload {
    webView.delegate = nil;
    [webView release];
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}



- (void)dealloc {
    [super dealloc];
}




@end

【问题讨论】:

    标签: objective-c ipad uiwebview


    【解决方案1】:

    您确实应该从 nib 加载它,但如果您要以编程方式创建它,您可能希望将其添加到 loadView:

    webView.userInteractionEnabled = YES;
    webView.scalesPageToFit = YES;
    

    【讨论】:

    • 谢谢,我原以为这也是问题所在,但事实并非如此。我试过 userInteractionEnabled 但它似乎没有任何效果。
    • 附言。我可以毫不费力地用笔尖让它工作,但我希望能理解为什么我不能让它以编程方式工作。
    【解决方案2】:

    我要在这里冒险了,因为你没有得到太多回应..

    这段代码没有任何问题(出问题了!我还没有测试过)。不使用 .nib 也没有任何问题(但实际上,你必须有一个理由,对吧?)。

    使用笔尖并没有什么神奇之处,只是和你在这里所做的差不多。

    您的问题一定出在其他地方。您可以与不同的视图进行交互吗?一个按钮,说?也许这与窗口设置有关?

    【讨论】:

      【解决方案3】:

      问题在于您在那里拥有的额外 UIView。它不是必需的,我认为触摸事件没有启用。我尝试了代码,但它没有像你说的那样工作。然后我将 EditorViewController 更改为此,它现在可以工作(我所做的只是删除额外的 UIView)拖动和选择链接现在可以工作了。

      - (void)loadView {
          NSLog(@"loadView called");
      
          webView = [[UIWebView alloc] init];
          webView.frame = CGRectMake(20, 40, 728, 964);
          webView.delegate = self;
          webView.backgroundColor = [UIColor redColor];
      
          self.view = webView;
      }
      

      【讨论】:

        猜你喜欢
        • 2012-04-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多