假设一个应用程序有很多视图被推送到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
{
}
答案 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]
隐藏了那个视图。不要忘记为该视图提供正确的内存管理(即及时发布等)。