当前位置:  开发笔记 > 编程语言 > 正文

在iPhone上的UIWebView中动态更改CSS

如何解决《在iPhone上的UIWebView中动态更改CSS》经验,为你挑选了0个好方法。

假设我正在开发一款汽车目录的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];
}

但是,就像点击第一个按钮一样,它似乎没有做任何事情.

有谁可以帮我解决这两个问题?

推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有