2010-12-15 67 views
4

相同的WebView基本上我有一個SecondViewControllerWebView我希望爲WebView要像一個標籤欄和完全可控的每個視圖中的每個視圖中可見。每個視圖

請注意,WebView將是一個在線幻燈片的網頁,所以我不能簡單地在每個視圖中SecondViewController重裝

我也有

- (void)webViewDidFinishLoad:(UIWebView *)YouTubePlayer { 

回答

1

我只是設置一個單身UIWebView並將其添加到每個視圖控制器視圖時,視圖控制器即將變得可見。下面是做這件事:

//.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; 
} 
+0

我收到一個錯誤, - (UIWebView *)webView { return [SharedWebView shared]; } in .h – user393273 2011-01-06 10:49:06

+0

錯誤是什麼? – TomSwift 2011-01-06 15:36:06

0

聽起來像是你試圖在把意見此視圖的頂部,但不是模態。我曾經看到過這篇博客文章描述了你如何做這樣的事情。我認爲它也應該適用於您的情況:semi-modal-transparent-dialogs-on-the-iphone

+0

我在視圖上使用選項卡,如果這有所作爲 – user393273 2010-12-15 22:43:51

-1

您是否可以不在應用程序上使用兩個Web視圖,只需更改最具動態內容的WebView?

+0

不,這不是需要的 – user393273 2010-12-16 10:00:55

0

在iOS中,UIViewControllers需要管理整個「屏幕」的內容,因此嘗試在多個視圖控制器間共享單個視圖是不正常的。試圖讓UIViewControllers的視圖只管理其窗口的一部分是有問題的,並且會導致意外的行爲,因爲UIKit不會將類似-viewWillAppear的消息發送到具有可見視圖的所有視圖控制器。相反,您通常會創建一個單一的UIViewController,其視圖包含該Web視圖以及其他視圖組成您的選項卡(如界面)。 或者,你可以有許多視圖控制器的層次結構,並添加一個單一的網絡視圖作爲他們所有人的子視圖。然後,您可以將Web視圖委託行爲導出到某個非UIViewController控制器類中,以管理Web視圖的行爲。

0

您可以將所有視圖佔據屏幕的一部分,然後讓其餘的UIWebView佔用。其他視圖之間切換的邏輯應保持不變。

例如,在你的viewDidLoad方法爲您UIViewController S,你可以有這樣的:

self.view.frame = CGRectMake(0, 100, 320, 380); 

而在你(說)AppDelegate,你將有你的正常呼叫顯示主UIViewController(以你的情況,這聽起來像是一個UITabBarController?),並且還打電話添加UIWebView。比如說:

myWebView.view.frame = CGRectMake(0, 0, 320, 100); 

視圖控制器和UIWebView將是相互獨立的。

我認爲這種模式適用於具有iAds的應用程序。我用我的一個免費應用程序做了這樣的事情。

希望這會有所幫助!

+0

UIViewController的根視圖(暴露爲'視圖'屬性)預計將填充窗口和自動調整大小。使用僅填充屏幕一部分的視圖創建控制器是有問題的,並且在UIKit無法發送控制器正常視圖控制器生命週期消息時會導致意外行爲。 – Jonah 2011-01-04 05:50:11

1

最簡單的方法是讓所有的視圖控制器知道這個額外的視圖(使視圖可以通過一個單獨的PinnedViewController或任何其他)。在剛做的每個視圖控制器的-viewWillAppear,這樣的:

[self addSubview:[[PinnedViewController sharedController] view]]; 

這將移動視圖誰是當前活動(創建視圖的子視圖將自動刪除您從舊的層次)。

如果這很麻煩或者不可行,還有其他兩個選項。首先,你可以子類UITabViewController(我假設你在這裏使用你的問題),並注入額外的視圖(調整內容視圖以騰出空間)。這是無證的,不支持的,所以要留意。但如果你不做太多其他花哨的技巧,這並不難。

另一個棘手的解決方案是創建第二個UIWindow,你漂浮在主要的UIWindow(或調整主要的UIWindow爲其騰出空間)。這只是半記錄的,也不是真的支持。但是,如果您試圖將額外的視圖放在tabbar下方,這種方法可以工作。

但是,如果您的系統足夠簡單,我建議讓視圖控制器全部手動管理固定視圖。您將以這種方式節省大量代碼,並且您不必依賴任何未公開的內部視圖層次結構。

3

我建議以後增加您窗口上的webView您添加tabbarcontroller.view就像:

[window addSubview:tabbarController.view]; 
[window addSubview:webview]; 
[window makeKeyAndVisible]; 

,最初讓不讓它可見。您應該處理應用程序委託中的所有webview相關方法。現在,只要您不需要它,您可以通過調用您在視圖控制器中寫入應用程序委託中的方法來隱藏它。

希望這會有所幫助。

0

我只需將它添加到navigationController本身得到了相同的效果(如果你沒有一個那麼只需添加它)。 在我的一個應用程序中適用於我。