2011-02-27 50 views
1

我必須在表單之前包含一些「富文本」說明;並認爲將UIWebView添加到tableview的標題將工作。 HTML是我資源文件夾中的一個小文件,CSS位於文件中的樣式標記中;所以這一切都很好,自我包容。如何防止延遲顯示我的UIWebView

問題是,視圖過渡;那麼在稍微延遲之後,webview的內容就會出現。效果震撼,我不認爲隱藏視圖並在其準備就緒的時候將視圖隱藏起來更加可取。

我用下面的代碼創建視圖,在我的viewDidLoad方法中。

UIWebView * wv = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, self.tableView.frame.size.width, HEADER_HEIGHT)]; 
[wv setBackgroundColor:[UIColor clearColor]]; 
[wv setOpaque:NO]; 
NSString *path = [[NSBundle mainBundle] pathForResource:@"HeaderMsg" ofType:@"html"]; 
assert(path != nil); 
NSData *htmlData = [NSData dataWithContentsOfFile:path]; 
[wv loadData:htmlData MIMEType:@"text/html" textEncodingName:@"utf-8" baseURL:nil]; 
[self.tableView setTableHeaderView:wv]; 
[wv release]; 

我發現了2個醜陋的解決方法,但我希望有人有更好的解決方案;因爲我的解決方法做一個真正惹出來的代碼:

  1. 在先前的畫面時,你的 UIMYSCREENViewController,呼叫 [vc preloadWebViewWithDelegate:self]; 方法將使用調用作爲委託進行的WebView 。 調用者然後保留該vc和 等待webview發送它一個 webviewDidFinishLoad方法,在 哪一次它可以呈現視圖 並釋放vc。

  2. 調用視圖可以使webview, 等待它完成,然後創建 新視圖並將webview傳遞給它。

無論如何,這兩個「解決方案」讓我有點g咽,所以我希望別人找到更好的方法。 (*該說明大多是簡單的,帶有一些項目符號(沒有圖像或過分積極的樣式)的風格文本;但它需要大約14個仔細對齊的UILabel視圖才能在沒有webview的情況下進行模擬 - 並且受到客戶想要更改消息。)

回答

1

我會創建另一個獨立的模型或控制器對象來創建和保留webview,希望在更高的級別和之前(可能在應用程序初始化)顯示與UI的視圖可以調出webview。

考慮到這與動作遊戲的預籌集資源相同,這樣就不必在遊戲循環中加載它,這是一種常見的設計模式。

+0

這是我的選擇#2,什麼碼目前並。將預加載延遲從「操作」移出並進入應用程序啓動狀態是一種很好的方式。不幸的是,當我展示這個觀點時,這是用戶會看到的第一個 - 所以我不需要將webview預加載遠離使用它的視圖。我仍然希望有人會推薦一個更清潔的解決方案,但我傾注了文檔,並懷疑沒有。 – Dave 2011-02-27 23:19:25

+0

我想過使用performSelector:withObject:afterDelay在我初始化後顯示〜700ms的視圖。至少在那時我沒有代碼遍佈各地的視圖。如果明天沒有人有更好的解決方案;我會接受你的回答。 – Dave 2011-02-27 23:19:59