基本上我WebView
上有SecondViewController
,我希望WebView
在每个视图上都可见,如标签栏,并且每个视图都可以完全控制。
请注意WebView
将出现在带有在线幻灯片的网页上,因此我无法在每个视图上重新加载
同样在SecondViewController
我有
- (void)webViewDidFinishLoad:(UIWebView *)YouTubePlayer {
答案 0 :(得分:3)
我建议您在添加webView
后添加tabbarcontroller.view
,就像:{/ p>
[window addSubview:tabbarController.view];
[window addSubview:webview];
[window makeKeyAndVisible];
并且最初制作不要让它可见。您应该在app delegate中处理所有与webview相关的方法。现在,只要你不需要它,你就可以通过从你的视图控制器中调用app delegate中写的方法来隐藏它。
希望这会有所帮助。
答案 1 :(得分:1)
最简单的方法是让所有视图控制器都知道这个额外的视图(通过单个PinnedViewController或其他任何方式使视图可用)。在每个视图控制器的-viewWillAppear
期间,只需执行以下操作:
[self addSubview:[[PinnedViewController sharedController] view]];
这会将视图移动到当前处于活动状态的任何人(查看子视图会自动将您从旧的层次结构中移除)。
如果这很麻烦或者不可行,还有其他两种选择。首先,您可以继承UITabViewController
(我假设您在此处使用的是您的问题),并注入额外的视图(调整内容视图的大小以腾出空间)。这是没有证件的,没有支持,所以请注意。但如果你不做太多其他花哨的技巧,那就不难了。
另一个棘手的解决方案是创建第二个UIWindow
,使其漂浮在主UIWindow
上(或调整主UIWindow
的大小以为其腾出空间)。这只是半文档化的,也不是真正支持的。但是,如果您尝试将额外视图置于标签栏下方,则此方法可以正常工作。
但是如果您的系统足够简单,我建议您让视图控制器全部手动管理固定视图。您将以这种方式保存大量代码,并且您不必依赖任何未记录的内部视图层次结构。
答案 2 :(得分:1)
我只是设置一个单独的UIWebView,并在该视图控制器即将变为可见时将其添加到每个view-controller-view。这是一种方法:
//.h
@interface SharedWebView : UIWebView
{
}
+ (SharedWebView*) shared;
@end
//.m
SharedWebView* g_sharedWebView;
@implementation SharedWebView
+ (SharedWebView*) shared
{
if ( g_sharedWebView == nil )
{
g_sharedWebView = [[SharedWebView alloc] init];
// ... any other intialization you want to do
}
return g_sharedWebView;
}
@end
// in your view controller(s)
@property (readonly) UIWebView* webView
- (UIWebView*) webView
{
return [SharedWebView shared];
}
- (void) viewWillAppear: (BOOL) animated
{
[super viewWillAppear: animated];
[self.view addSubview: self.webView ];
self.webView.frame = CGRectMake(10, 10, 300, 300);
// want to re-set the delegate?
// self.webView.delegate = self;
}
答案 3 :(得分:0)
听起来你试图将视图置于此视图之上,但不是模态。我曾经看过这个博客文章,描述了你将如何做这样的事情。我认为它也适用于您的情况:semi-modal-transparent-dialogs-on-the-iphone
答案 4 :(得分:0)
在iOS中,UIViewControllers需要管理整个“屏幕”内容,因此尝试在多个视图控制器之间共享单个视图是不正常的。试图让UIViewControllers的视图只管理其部分窗口是有问题的,并且会导致意外行为,因为UIKit不会向所有具有可见视图的视图控制器发送-viewWillAppear等消息。相反,您通常会创建一个单独的UIViewController,其视图包含该Web视图以及任何其他视图组成您的选项卡界面。 或者,您可以拥有许多视图控制器的层次结构,并添加单个Web视图作为所有视图控制器的子视图。然后,您可以将Web视图委托行为拉出到某个非UIViewController控制器类中,以管理Web视图的行为。
答案 5 :(得分:0)
您可以让所有观看次数占据屏幕的一部分,让UIWebView
占用其余部分。其他视图之间切换的逻辑应该保持不变。
例如,在您viewDidLoad
的{{1}}方法中,您可以使用以下内容:
UIViewController
在您(比如说)self.view.frame = CGRectMake(0, 100, 320, 380);
中,您可以正常通话来显示主AppDelegate
(在您的情况下,它听起来像UIViewController
?)并且还有一个致电添加UITabBarController
。比如说:
UIWebView
视图控制器和myWebView.view.frame = CGRectMake(0, 0, 320, 100);
将彼此独立。
我认为,对于拥有iAd的应用,您会看到此模式。我用我的一个免费应用程序做了类似的事情。
希望这有帮助!
答案 6 :(得分:0)
我只需将它添加到navigationController本身即可获得同样的效果(如果你没有,那么只需添加它)。 在我的一个应用程序中对我很有用。
答案 7 :(得分:-1)
您是否可以在应用程序中使用两个webview,只需使用更具动态性的内容更改最上面的webview?