假设我正在开发一款汽车目录的iPhone应用程序.用户将从列表中选择一辆汽车,我将展示汽车的详细视图,其中将描述最高速度等内容.详细视图基本上UIWebView
是加载现有HTML文件的视图.
不同的用户将居住在世界的不同地方,因此他们希望看到汽车的最高速度,无论哪个单位适合他们的地区.假设有两个这样的单位:SI(km/h)和传统(mph).我们还说用户可以通过点击屏幕上的按钮来更改显示单位; 当发生这种情况时,细节屏幕应切换到显示相关单位.
到目前为止,这是我尝试解决这个问题的方法.
HTML可能看起来像这样:
Some Car Some Car
Top Speed: 160 km/h
Top Speed: 100 mph
持久的样式表,persistent.css:
#si { display:none; } #conventional { display:none; }
第一个备用样式表,si.css:
#si { display:inline; } #conventional { display:none; }
而第二个备用样式表,conventional.css:
#si { display:none; } #conventional { display:inline; }
基于A List Apart 的教程,我的switch.js看起来像这样:
function disableStyleSheet(title) { var i, a; for (i = 0; (a = document.getElementsByTagName("link")[i]); i++) { if ((a.getAttribute("rel").indexOf("alt") != -1) && (a.getAttribute("title") == title)) { a.disabled = true; } } } function enableStyleSheet(title) { var i, a; for (i = 0; (a = document.getElementsByTagName("link")[i]); i++) { if ((a.getAttribute("rel").indexOf("alt") != -1) && (a.getAttribute("title") == title)) { a.disabled = false; } } } function switchToSiStyleSheet() { disableStyleSheet("conventional"); enableStyleSheet("si"); } function switchToConventionalStyleSheet() { disableStyleSheet("si"); enableStyleSheet("conventional"); }
我的按钮动作处理程序看起来像这样:
- (void)notesButtonAction:(id)sender { static BOOL isUsingSi = YES; if (isUsingSi) { NSString* command = [[NSString alloc] initWithString:@"switchToSiStyleSheet();"]; [self.webView stringByEvaluatingJavaScriptFromString:command]; [command release]; } else { NSString* command = [[NSString alloc] initWithFormat:@"switchToConventionalStyleSheet();"]; [self.webView stringByEvaluatingJavaScriptFromString:command]; [command release]; } isUsingSi = !isUsingSi; }
这是第一个问题.第一次按下按钮时,UIWebView
不会改变.它第二次被击中,看起来像传统的样式表被加载.第三次,它切换到SI样式表; 第四次,回到常规,等等.所以,基本上,只有按下第一个按钮似乎没有做任何事情.
这是第二个问题.我不确定如何在初始加载时切换到正确的样式表UIWebView
.我试过这个:
- (void)webViewDidFinishLoad:(UIWebView *)webView { NSString* command = [[NSString alloc] initWithString:@"switchToSiStyleSheet();"]; [self.webView stringByEvaluatingJavaScriptFromString:command]; [command release]; }
但是,就像点击第一个按钮一样,它似乎没有做任何事情.
有谁可以帮我解决这两个问题?