2013-03-01 23 views
1

我在一個新的Cocoa Touch Library中工作,我需要以編程方式顯示UIWebView,因爲我要在外部網絡中請求用戶和密碼(如oAuth),但我不知道我該如何在Cocoa Touch Library中做到這一點。在Cocoa Touch Library中顯示UIWebView

示例代碼:

Client.h

#import <Foundation/Foundation.h> 

@interface Client : NSObject 

@property NSString *_aProperty; 

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

@end 

Client.m

#import "Client.h" 

@implementation Client 

@synthesize _identity; 

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

@end 

回答

1

就我而言,你可以展示可可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觸發它你正在引用這個庫。

+0

我喜歡這部分:'UIViewController * myVC = [self.navigationController。' 明天我會試試:) – chemitaxis 2013-03-06 19:59:05

+0

如果你有一個'UINavigationController'並且你想要訪問的視圖是視圖層次結構中的最後一個視圖(基本上是99%的時間),它就會工作。 – 2013-03-06 23:16:54

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。

+0

有一個問題,在哪裏執行UIWebView的委託方法? – chemitaxis 2013-03-06 19:57:28

+0

'UIApplication * app = [UIApplication sharedApplication];'這是應用程序的根? – chemitaxis 2013-03-06 20:02:17

+0

你沒有詢問代表:)讓我想想 – 2013-03-06 20:02:30

0

我認爲要做到這一點最簡單的方法是將有來自應用程序的調用到你的庫提供一個上海華成可以再加入你的子視圖:

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

@end 

這將要求用戶的代碼在他們的應用程序中提供他們願意讓你放置UIWebView *實例的位置。

(BOOL指示成功或失敗的完成塊允許您的庫根據需要操作webview,當您到達可報告成功或失敗的位置時,完成句柄將爲您提供一種方式要做到這一點)。

一旦你有了這個,在他們傳遞的超級視圖中添加你的UIWebView可以像你想要的那樣簡單或複雜。你可以接管整個框架,或者你可以佔據一個角落,或者你可以是動態的,並根據他們給你的superView的大小來決定做什麼。

0

這應該是你的。

您必須將Web視圖的x,y,寬度,高度分別替換爲您添加的視圖以及self.view與存儲父視圖的變量。

例如,如果您想將其添加到根視圖(窗口),您可以用[[UIApplication sharedApplication] keyWindow]替換self.view。

- (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. 
}