1

私は新しい Cocoa Touch Library で作業しており、外部 Web でユーザーとパスワード (oAuth など) を要求するため、UIWebView をプログラムで表示する必要がありますが、Cocoa Touch 内でこれを行う方法がわかりません。としょうかん。

コード例:

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
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

これで十分です。

フレームを追加するビューに対応する 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 に答える
0

これを行う最も簡単な方法は、アプリからライブラリへの呼び出しで、サブビューを追加できるスーパービューを提供することだと思います。

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

@end

これには、コードのユーザーが、アプリ内で UIWebView* インスタンスを配置できる場所を提供する必要があります。

(成功または失敗を示す BOOL を持つ完了ブロックにより、ライブラリは必要に応じて webview を操作できます。成功または失敗を報告できる場所に到達すると、完了ハンドルがこれを行う方法を提供します。 )

これを取得したら、渡されたスーパービュー内に UIWebView を追加することは、必要に応じて単純または複雑にすることができます。フレーム全体を引き継ぐことも、コーナーを取ることもできます。または、動的になって、作業用に提供される superView のサイズに基づいて何をすべきかを決定することもできます。

于 2013-03-10T03:44:34.200 に答える