可以从uinavigationView中的所有视图访问的通用“帮助”视图

时间:2012-09-10 12:33:25

标签: objective-c ios ipad uiwebview uinavigationcontroller

假设一个应用程序有很多视图被推送到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
{
}

1 个答案:

答案 0 :(得分: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中加载在initialisator中获取的url:

- (void)viewDidLoad
{
    [super viewDidLoad];

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

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

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