2009-07-25 21 views
9

'un altına denetim ekleme Bir UIWebView'ın altına birkaç denetim (ör. Bazı UIButtons) eklemek için en basit, en hızlı veya başka şekilde (nesnel olarak) en iyi yol nedir?Bir UIWebView

Net olmak gerekirse, düzenli bir kaydırma UIWebView görüntülemek istiyorum, ancak kaydırma aşağıya ulaştığında orada web içeriği sonra bazı UIController olmak istiyorum. Kontrol gibi görünen HTML/CSS içeriğiyle onu taklit etmemeyi tercih ederim; İdeal olarak, her zamanki gibi benim görüntüleyici kontrol cihazına bağlanabileceğim gerçek kontroller olmalı.

Ben UIWebView ve kontrolleri (UIScrollView ve iç içe UIWebView arasındaki çatışmaları kaydırma olacak?) Veya içeren bir UITableView ile hem içeren bir büyük UIScrollView ile bunu denemek için en kolay olup olmadığını bilmiyorum Web görünümü ve ayrı hücrelerdeki kontroller (performansınız korkunç olur mu?) veya başka bir şekilde düşünmediğim bir şekilde.

Güncelleştirme: UIWebView'ın kendisini gerçekten kaydırmasını istediğimi sanmıyorum; İçeriğinin tamamını barındırmak için yeniden boyutlandırmam gerektiğini, kaydırma davranışını tamamen devre dışı bırakacağını ve kullanıcının UIWebView öğesinin farklı bölümlerini göstermek için ana görünümünü (UIScrollView veya UITableView) kaydırmasına izin verdiğimi düşündüm.

+0

ben HTML ve CSS ile boşalmış gibi sona erdi. -webkit-görünüm: basma düğmesi bu daha lezzetli hale getirir. "Bir büyük UIWebView" yaklaşımıyla ilgili sorun, görüntülemelerin maksimum 1024x1024 piksel boyutuna sahip olması olduğundan, bir sayfanın tamamını bir sayfaya yüklemeniz ve bir UIScrollView içine yapıştırmanız gerekmez. Büyük bir sayfayı daha küçük sayfalara ayırmak ve her parça için ayrı bir UIWebView kullanmak mümkün olmalıdır, ancak bu sadece vermektense ve bu sayfaların düğmelerini gerçek sayfa içeriğinin bir parçası yapmaktan daha kötü bir çözüm gibi görünüyordu. –

cevap

8

Önerdiğiniz UIScrollView veya UITableView çözümleri işe yaramaz.

UIWebView'ı bir UIScrollView'a koyarsanız, biri veya diğeri kaydırmaları yakalar ve içerik bölmesini kaydırır, ancak diğeri olmaz. Hangisinin olacağını bilmiyorum, sanırım UIScrollView olurdu. Her durumda, UIWebView'da kaydırma sonuna ulaştığınızda UIScrollView'ın kaydırması için bir hüküm yoktur, ya da tam tersi.

Bir UITableView kullanırsanız, UIWebView kendi hücresinin içinde kaydırır, ancak UITableView hiç kaydırmaz veya UIWebView hiç kaydırmaz ve UITableView bunu gerçekleştirmez. 'Gruplandırılmış' tablo stilini kullanırsanız, UIWebView ve UITableView'ları kaydırmanız mümkündür, ancak aradığınız tutarlı deneyim türü bu olmaz. Ben işe yarayabilecek bu düşünebiliriz

tek teknik UIWebView dahili özelliklerine etrafında muck ve UIWebView tarafından kullanılan kaydırma varlığa etajer sizin UIView içeren düğmeleri eklemek ve etmektir. Bu benim ken'imin ötesindedir, ancak these header dumps will get you started. Apple'ın yaptığınız şeyi fark etmesi durumunda uygulamanızı reddedebileceğini ve ayrıca dahili kullanıcıların herhangi bir zamanda kodunuzu değiştirebileceğini unutmayın. Bu rotaya giderseniz, eksik işlevlerin zarif bir arızaya neden olacağı şekilde kodlamayı deneyin.

DÜZENLEME:

bazı tartışma ve deney, OP ile

ve bunu çok mümkündür ve hiç iç yapıları dayanmaz bunu yapmanın bir yolu yoktur sonucuna vardık. Yani, kapalı bir kaydırma görünümü kullanın ve kendi içerik görünümünün tam boyutuna yüklendikten sonra web görünümünü yeniden boyutlandırın. Bu boyut [webView sizeThatFits: CGSizeZero] kullanılarak bulunabilir. Bunu başarmak için UIWebView mahremlerine kullanmak istediğiniz olmadıysa

, ben zaten :) çalıştı

- (void)applicationDidFinishLaunching:(UIApplication *)application {  

    // Override point for customization after app launch 
    UIView* testView = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)] autorelease]; 
    UIWebView* testWebView = [[[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)] autorelease]; 
    [testView addSubview:testWebView]; 
    [testWebView setDelegate:self]; 
    [testWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://google.com"]]]; 



    [window addSubview:testView]; 
    [window makeKeyAndVisible]; 
} 
- (void)webViewDidFinishLoad:(UIWebView *)webView { 
    UIView *insert = [[[UIView alloc] initWithFrame:CGRectMake(0, [[webView _documentView] frame].size.height, 320, 40)] autorelease]; 
    [insert setBackgroundColor:[UIColor greenColor]]; 
    [[webView _documentView] addSubview:insert]; 
} 
+0

Kapsamlı ve düşünceli bir cevap için teşekkür ederiz. UIWebView'ın kendisini hiç kaydırmasını istemiyorum, ancak: Tüm içeriğini (örneğin, birkaç ekran yüksekliğinde) görüntüleyecek kadar büyük boyutta yeniden boyutlandırmayı ve yalnızca büyük görünmenin farklı bir bölümünü göstermek için ana görünümü kaydırmayı hayal ediyorum. UIWebView (ve sonunda altındaki kontroller). Bu mümkün değil mi? –

+0

Aslında bu elde edilebilir. İsteği (scalesPageToFit = NO ile) yüklemeniz, sayfanın ne kadar uzun olduğunu bulmanız ve bunu UIScrollView öğenizin içeriğiyle uyumlu hale getirmeniz gerekir. Gördüğüm tek sorun, sayfanın gerçekte ne kadar uzun olduğunu bulmak. Bu, içsellerde bir şeylerin koparılmasını gerektirebilir; UIWebView, içerik görünümünün nasıl olduğunu anladığını biliyor, ancak bunu size söylemenin kolay bir yolu olduğundan emin değilim. Şu anda bazı test kodlarıyla uğraşıyorum, nasıl olacağını bildiğimi söyleyeceğim. –

+0

Parlak. Tekrar teşekkürler. [WebView sizeThatFits: CGSizeZero] hile yapmaz mı? (http://www.iphonedevsdk.com/forum/iphone-sdk-development/1388-getting-actual-content-size-uiwebview.html) –

1

Kamu SDK'sı kısıtlamalarında bunu yapmanın bir yolu olduğuna inanmıyorum.

+0

Ah canım. Ne büyük UIScrollView ne de UITableView işe yaramaz mı? Neden olmasın? –

0

Bu hepsini aldım beri, UIWebView doküman görünümüne bir görünüm ekleyerek kısa bir kod örneği var ben böyle yaparım.

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


for(UIView *view in [webView subviews]){ 

    if([view isKindOfClass:[UIScrollView class]]){ 
     NSLog(@"Scrollview found with tag %d", [view tag]); 

     UIScrollView *scroll= (UIScrollView *)view; 
     [scroll addSubview:self.finishBtn]; 
     [finishBtn setCenter:CGPointMake(webView.center.x, scroll.contentSize.height-30)]; 
    } 


} 

}