1

假设应用程序有许多视图推送到 uinavigationViewController,每个视图的内容都不同。

由于应用程序中的元素很复杂,我想为特定视图或特定视图中的元素显示一个小的帮助视图。想象一个“?” 按下该按钮时,将在屏幕中央弹出一个新视图,播放 youtube 帮助视频,或者只是从远程服务器加载的文本 HTML。

问题:做这种事情的最佳策略是什么?我应该在哪里放置此代码(App Delegate?)

如果是这样,我将如何从其他视图中调用它(使用 URL 参数)

-(void)showHelpView:(NSString *)theURLString{

    UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 800, 600)];

    //webView.delegate= self;
    [webView  loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:theURLString]]];
    [window addSubview:webView];
    [window makeKeyAndVisible];
}
- (void)webViewDidStartLoad:(UIWebView *)webView
{

}
- (void)webViewDidFinishLoad:(UIWebView *)webView
{

}
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
{
}
4

1 回答 1

0

我更喜欢使用伪模态视图。这样您每次都创建视图,并将其添加到当前窗口的顶部。我在上一个应用程序中将这种方法用于 OAuth 2.0 授权弹出窗口。

基本上你创建自定义 UIViewController 子类,提供自定义初始化器,例如:

// - (id) initWithURL: (URL*)url {
// ...
// self.url = url;
// ...
// return self;

PseudoModalViewController* pmvc = [[PseudoModalViewController alloc] initWithURL:@"http://www.google.com/"];

创建视图后,将其添加到当前窗口的顶部:

UIWindow* window = [[UIApplication sharedApplication] keyWindow];
if(!window)
{
    window = [[[UIApplication sharedApplication] windows] objectAtIndex:0];
}
[window addSubview:pmvc.view];

例如,在 viewDidLoad 中,您加载在初始化程序中获得的 url:

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self.webView loadRequest:[NSURLRequest requestWithURL:url]];
}

你甚至可以为此在 Interface Builer 中设计 UI。作为最后一部分,我建议添加包括全屏透明背景视图,以确保禁用下面的所有视图。

哦,差点忘了,你只用一个简单的[self.view removeFromSuperview]. 不要忘记为该视图提供正确的内存管理(即及时释放它等)。

于 2012-09-10T13:15:59.237 回答