在 Objective-C 中更改 Javascript 变量

Posted

技术标签:

【中文标题】在 Objective-C 中更改 Javascript 变量【英文标题】:Changing a Javascript variable in objective-C 【发布时间】:2012-04-14 20:57:10 【问题描述】:

我正在使用此代码(在我的 .m 文件中)将变量传递到捆绑的 javascript 文件中。

[animalDesciption stringByEvaluatingJavaScriptFromString:@"var myIDcounterVariable = '1'"];

我设置了这个,通过按下 UIButton 来更改 UILabel 的值非常有用:

-(IBAction)next:(id)sender 
number++;
[currentNumber setText:[NSString stringWithFormat:@"%d", number]];


如何让按钮更改 JavaScript 变量的值,就像我对标签所做的那样?

请原谅我的话!我对这种编程很陌生...

如果我需要提供更多信息,请告诉我。

【问题讨论】:

我做错了什么,为什么我被否决了?我非常愿意被告知为什么我不应该问一个问题,或者有更好的方法可以做到这一点。我花了整个下午试图弄清楚如何做到这一点,并且发布此评​​论是最后的手段。 我认为您的确切问题是什么有点不清楚。您的代码中似乎包含了上面的所有部分,但我不知道将它们放在一起时有什么问题,而且您没有说您尝试了什么。 好的,基本上我可以通过手动将“1”更改为“2”(或“3”或“4”)并重新获得第一个代码块来执行我想要它执行的操作构建应用程序并运行它。 所以我当前的代码所做的是将我的 UIWebView 滚动到 html 中锚点的第一个 ('1') 实例。通过将“1”更改为另一个数字,页面将滚动到第二个或第三个锚点。我做标签的原因是看看我是否可以通过单击按钮来增加一个值,它工作得很好!问题是我不知道如果是“1”,我不知道如何将我的增量值放入该位置。 【参考方案1】:

这就是你所需要的吗?

-(IBAction)next:(id)sender 
    number++;

    // You want Javascript like this to run:
    //     myIDCounterVariable = '1'
    // but with the current value of 'number' in it.

    // Construct the string:
    NSString* jsString = [NSString stringWithFormat:@"myIDCounterVariable = '%d'", number];

    // and run it
    [animalDesciption stringByEvaluatingJavaScriptFromString:jsString];

【讨论】:

这看起来正是我想要的,但它对我没有任何作用!我在想这可能是因为 javascript 函数要求在页面加载时设置变量,而当变量稍后更改时它不会做任何事情。 听起来很有道理。您可能希望您的 JS 具有类似“scrollToAnchorWithIndex()”的功能。然后让 Obj-C 代码构造像“scrollToAnchorWithIndex(%d)”这样的 JS 字符串并计算它。 是的,这与我所做的类似,我只是使用 JavaScript 进行了递增。再想一想,像你建议的那样在 Obj-C 中增加可能会更干净......我会继续发布我当前的配置。【参考方案2】:

我最终做的是将这个 JavaScript 函数添加到我的 UIWebView:

<script type="text/javascript">
var max = 100;

function goToNext() 
    var hash = String(document.location.hash);
    if (hash && hash.indexOf(/hl/)) 
        var newh = Number(hash.replace("#hl",""));
        (newh > max-1) ? newh = 0 : void(null);
        document.location.hash = "#hl" + String(newh-1); 
     else 
        document.location.hash = "hl1";        
    


</script>

然后像这样用我的 IBAction 发送这个 JavaScript 调用:

- (IBAction)next:(id)sender 
    [animalDesciption stringByEvaluatingJavaScriptFromString:@"goToNext()"];

【讨论】:

以上是关于在 Objective-C 中更改 Javascript 变量的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Objective-C 中更改垃圾按钮的颜色? [复制]

iOS在Objective-C中登录/注销过程后更改rootViewController

在 Objective-C 中,如何通过 UIControl 更改类内部实例的属性?

如何在 Objective-C 中的 UITextField 中每次更改后调用一个动作?

可可objective-c:更改自定义视图的背景颜色

在显示之前更改 UIRefreshControl 标题 - Objective-c iOS