2011-01-06 7 views
18

Mam dziwny problem z loadHTMLString UIWebView, gdzie wyświetlałby on pusty widok tylko wtedy, gdy wywołałbym loadHTMLString z moim ciągiem HTML treści. Nie ma znaczenia, jaka jest zawartość htmlstringu, po prostu nie robi nic.UIWebView loadHTMLString pokazuje pusty ekran

Dziwne jest to, że pracował kilka tygodni temu, kiedy testowałem go na symulatorze i urządzeniu. Moje kodu jest poniżej:

NSMutableString *sHtmlBuf = [NSMutableString stringWithString:@"<body style=\"background-color: #000000; color: #FFFFFF; font-family: Helvetica; font-size: 10pt; width: 300px; word-wrap: break-word;\">"]; 

if ([m_oCallArray count] > 0 || [m_oPutArray count] > 0) { 
    [sHtmlBuf appendString:sWarrTitle]; 

    if ([m_oCallArray count] > 0) { 
     NSString *formattedCall = [NSString stringWithFormat:@"%@ %@<br />",sCallTitle,[self arrayToString:m_oCallArray]]; 
     [sHtmlBuf appendFormat:@"%@ ",formattedCall]; 
    } 

    if ([m_oPutArray count] > 0) { 
     NSString *formattedPut = [NSString stringWithFormat:@"%@ %@<br />",sPutsTitle,[self arrayToString:m_oPutArray]]; 
     [sHtmlBuf appendFormat:@"%@ ",formattedPut]; 
    } 

} 

if ([m_oBullArray count] > 0 || [m_oBearArray count] > 0) { 
    [sHtmlBuf appendString:sCbbcTitle]; 

    if ([m_oBullArray count] > 0) { 
     NSString *formattedBull = [NSString stringWithFormat:@"%@ %@<br />",sBullTitle,[self arrayToString:m_oBullArray]]; 
     [sHtmlBuf appendFormat:@"%@ ",formattedBull]; 
    } 

    if ([m_oBearArray count] > 0) { 
     NSString *formattedBear = [NSString stringWithFormat:@"%@ %@<br />",sBearTitle,[self arrayToString:m_oBearArray]]; 
     [sHtmlBuf appendFormat:@"%@ ",formattedBear]; 
    } 

} 

if ([m_oOtherArray count] > 0) { 
    NSString *formattedOther = [NSString stringWithFormat:@"%@ %@<br />",sOtherTitle,[self arrayToString:m_oOtherArray]]; 
    [sHtmlBuf appendFormat:@"%@ ",formattedOther]; 
} 

[m_oDataPresentView loadHTMLString:sHtmlBuf baseURL:nil]; 

(Uwaga: HTML może render na zwykłej przeglądarki internetowej przed tym problemem, więc HTML nie jest problemem)

EDIT: Dodano kod inicjalizacji:

//Create wcbbc panel 
wcbbcPanel = [[WarrantsAndCbbc alloc] initWithFrame:CGRectMake(320, 0, 320, 230)]; 
[m_oMainContentScrollView addSubview:wcbbcPanel]; 

UIView kod inicjalizacji:

- (id)initWithFrame:(CGRect)frame { 

    self = [super initWithFrame:frame]; 
    if (self) { 
     // Initialization code. 
     CGRect oFrame = frame; 
     CGPoint oPositionCoords = CGPointMake(0, 0); 
     oFrame.origin = oPositionCoords; 

     m_oDataPresentView = [[UIWebView alloc] initWithFrame:oFrame]; 
     [m_oDataPresentView loadHTMLString:@"<html><body style=\"background-color: #000000; color: #FFFFFF; font-family: Helvetica; font-size: 10pt; width: 300px; word-wrap: break-word;\"></body></html>" baseURL:nil]; 
     m_oDataPresentView.delegate = self; 

     [self addSubview:m_oDataPresentView]; 
    } 
    return self; 
} 
+0

Czy możesz pokazać nam kod, w którym tworzysz "UIWebView" i dodajesz go do swojego widoku? – donkim

Odpowiedz

40

Po nieco pracy detektywistycznej, okazało się, że wracając NO w funkcji delegata

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 

odrzuci żądania loadHTMLString. Powracający TAK rozwiązał mój problem.

+1

Każdy pomysł, dlaczego nie zadziałał wcześniej? to znaczy. Co się zmieniło? –

+0

shouldStartLoadWithRequest zapyta, czy przeglądarka internetowa powinna kontynuować ładowanie strony. return NO powoduje, że strona internetowa nie ładuje się. – futureelite7

+2

W moim przypadku chciałem przechwycić linki, aby wysłać je do Safari. Aby to zrobić: 'if (navigationType == UIWebViewNavigationTypeLinkClicked) return NO; else return TAK; '. – Max

0

Od kodzie inicjalizacji dla UIWebView, wygląda na to, że dodajesz wcbbcPanel w pozycji, która byłaby poza ekranem. Spróbuj to zamiast:

wcbbcPanel = [[WarrantsAndCbbc alloc] initWithFrame:CGRectMake(0, 0, 320, 230)]; 
6

prostu miałem ten sam problem, i jest n00b, znalazłem się zaskoczony, że problem został rozwiązany, kiedy nie zrobił

webview = [[UIWebView alloc]init]; 

ale zamiast tego, ponieważ został już podłączony jako gniazda , musiałem po prostu zadzwonić pod numer

+0

Bardzo mi to pomogło. Zgaduję, że z ARC nie musisz już inicjować własnych przedmiotów? – jocull