1

我正在一个新的 Cocoa Touch 库中工作,我需要以编程方式显示 UIWebView,因为我将在外部网络中请求用户和密码(如 oAuth),但我不知道如何在 Cocoa Touch 中执行此操作图书馆。

示例代码:

客户端.h

#import <Foundation/Foundation.h>

@interface Client : NSObject

@property NSString *_aProperty;

- (void)showUIWebView:(NSURL*)urlToOpen;

@end

客户端.m

#import "Client.h"

@implementation Client

@synthesize _identity;

- (void)showUIWebView:(NSURL*)urlToOpen
{        
   // I need to write code here to show the UIWebView :) 
}

@end
4

4 回答 4

4

我能够使用这样的代码来做到这一点:

UIApplication *app = [UIApplication sharedApplication];
UIWebView *web = [[UIWebView alloc] initWithFrame: CGRectMake(10, 40, 300, 300)];
NSURLRequest *req = [NSURLRequest requestWithURL: [NSURL URLWithString: @"http://yahoo.com"]];
[web loadRequest: req];
[app.keyWindow addSubview: web];

所以主要思想是将您的视图作为子视图添加到应用程序的 keyWindow 中。

于 2013-03-06T14:58:42.777 回答
1

就我而言,您只能在内部显示 Cocoa-Touch 中的 UI 元素UIViewControllers——这看起来很合乎逻辑。

在您的方法中,您NSObject可以通过创建对它的引用来触发另一个方法,UIViewController然后此时将其添加到您的方法UIView中:

- (void)showUIWebView:(NSURL*)urlToOpen {        
UIViewController *myVC = [self.navigationController.viewControllers lastObject];
//This is your last view in the navigationController hierarchy.
UIWebView *newWebView = [[UIWebView alloc] initWithFrame:myVC.view.frame];
[myVC.view addSubview:newWebView];
}

或者你可以从另一个ViewController你引用这个库的地方触发它。

于 2013-03-06T14:48:45.753 回答
0

我认为最简单的方法是让应用程序调用到您的库中提供一个超级视图,然后您可以将您的子视图添加到其中:

@interface ChemitaxisLibrary
typedef void (^ChemitaxisLibraryLoginCompletionBlock)(BOOL loggedIn);
- (void)loginWithinSuperview:(UIView*)superView completion:(ChemitaxisLibraryLoginCompletionBlock)completion;

@end

这将要求您的代码用户在他们的应用程序中提供他们愿意允许您放置 UIWebView* 实例的位置。

(带有指示成功或失败的 BOOL 的完成块允许您的库根据需要操作 web 视图,当您到达可以报告成功或失败的地方时,完成句柄将为您提供一种方法来执行此操作。 )

一旦你有了这个,在他们传递的超级视图中添加你的 UIWebView 可以像你想要的那样简单或复杂。你可以接管整个框架,或者你可以占据一个角落,或者你可以是动态的,并根据他们给你的 superView 的大小来决定做什么。

于 2013-03-10T03:44:34.200 回答
0

你应该这样做。

您必须将 Frame 替换为与您添加到的视图相对应的 Web 视图的 x、y、宽度、高度,并将 self.view 替换为存储父视图的变量。

例如,如果您想将其添加到根视图(窗口),您可以将 self.view 替换为 [[UIApplication sharedApplication] keyWindow]。

- (void)showUIWebView:(NSURL*)urlToOpen {
    UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 460.0f)]; // WebView Location & Dimensions
    [webView loadRequest:[NSUrlRequest requestWithURL:urlToOpen]];

    [self.view addSubView:webView]; // Where self.view is the view you wish to add the Web View to.
}
于 2013-03-13T11:32:22.090 回答