MonoTouch中的简单融合图无法正常工作

时间:2012-04-28 15:10:36

标签: ios uiwebview mono xamarin.ios fusioncharts

我正在尝试使用UIWebView在我的MonoTouch项目中从fusioncharts嵌入column3d图表。我添加了必要的插件并通过使用loadrequest来加载网址和loadHtmlString来格式化简单的文本行进行测试。这很好用。我甚至测试了Fusionchart在我的浏览器上使用下面的代码正常工作,它确实可以。

我的MonoTouch项目中有一个名为“charts”的文件夹,其中包含Column3d.swf,jquery.min.js,FusionCharts.js,FusionCharts.HC.js和FusionCharts.HC.Charts.js。

在我的

  • viewDidLoad中

    string htmlString = "<html>
                         <head>
                         <script type=\"text/javascript\"src=\"Charts/jquery.min.js\">
                         </script>
                         <script type=\"text/javascript\" src=\"Charts/FusionCharts.js\">
                         </script>
                         <script type=\"text/javascript\" src=\"Charts/FusionCharts.HC.js\">
                         </script>
                         <script type=\"text/javascript\" src=\"Charts/FusionCharts.HC.Charts.js\">
                         </script>
                         </head>
                         <body>
                         <div id=\"chartContainer\">FusionCharts will load here!
                         </div>
                         <script type=\"text/javascript\"> var myChart = new FusionCharts( \"Charts/Column3D.swf\", \"myChartId\", \"400\", \"300\", \"0\", \"1\" );myChart.setXMLUrl(\"Charts/Data.xml\");
                        myChart.render(\"chartContainer\");
                         </script>
                         </body>
                         </html>";
    
    this.webView.LoadHtmlString (htmlString, new NSUrl ("./Charts", true));
    
        /*string htmlString = "<html><head></head><body><span style=\"font-weight: bold;\">This</span> " +
     "<span style=\"text-decoration: underline;\">is</span> <span style=\"font-style: italic;\">some formatted</span> " +"<span style=\"font-weight: bold;text-decoration: underline;\">text!</span><br></body></html>";*/  //works
    
        //this.webView.LoadHtmlString (htmlString, null);  //works
    
  • data.xml中

    <chart caption='Weekly Sales Summary'
    xAxisName='Week' yAxisName='Amount' numberPrefix='$'> 
    <set label='Week 1' value='14400' /> 
    <set label='Week 2' value='19600' /> 
    <set label='Week 3' value='24000' /> 
    <set label='Week 4' value='15700' /> 
    </chart>
    

有人可以解释我是如何让这个工作的吗?提前谢谢。

编辑:我也试过

    string htmlString = "<html><head> <title>Creating Pure JavaScript chart</title><script type=\"text/javascript\" src=\"charts/FusionCharts.js\"></script></head> <body><div id=\"chartContainer\">FusionCharts will load here!</div> <script type=\"text/javascript\">FusionCharts.setCurrentRenderer('javascript');var myChart = new FusionCharts( \"charts/Column3D.swf\", \"myChartId\", \"400\", \"300\", \"0\", \"1\" );myChart.setXMLData(\"<chart><set label='Data1' value='1' /></chart>\"); myChart.render(\"chartContainer\"); </script></body> </html>";

其中我强制渲染器使用javascript并在字符串中设置图表参数无效。任何人吗?

3 个答案:

答案 0 :(得分:1)

我解决了我的问题,并且如果有人遇到类似的问题我会发布它。

我做的第一件事是右键单击我的每个javscript文件,即FusionCharts.js,FusionCharts.HC.js和FusionCharts.HC.Charts.js,并将它们的构建类型设置为内容。

然后我告诉Monotouch图表的构建路径将通过声明

包含在图表文件夹中
string path = NSBundle.MainBundle.BundlePath + "/Charts/";

由于我宣布我将在Charts文件夹中查找相关文件,因此我必须通过删除所有“src”中的“charts”关键字引用来修改我的htmlString,如下所示(因为我们已经好了。

string htmlString = "<html>
                 <head>
                 <script type=\"text/javascript\" src=\"jquery.min.js\">
                 </script>
                 <script type=\"text/javascript\" src=\"/FusionCharts.js\">
                 </script>
                 <script type=\"text/javascript\" src=\"/FusionCharts.HC.js\">
                 </script>
                 <script type=\"text/javascript\" src=\"FusionCharts.HC.Charts.js\">
                 </script>
                 </head>
                 <body>
                 <div id=\"chartContainer\">FusionCharts will load here!
                 </div>
                 <script type=\"text/javascript\"> var myChart = new FusionCharts(\"Column3D.swf\", \"myChartId\", \"400\", \"300\", \"0\", \"1\"          );myChart.setXMLUrl(\"Charts/Data.xml\");
                myChart.render(\"chartContainer\");
                 </script>
                 </body>
                 </html>";

然后我调用loadHtml字符串方法,如下所示,第二个参数指向包含javascript文件的路径。

this.webView.LoadHtmlString(htmlString, new NSUrl(path, true));

答案 1 :(得分:0)

  

我甚至使用下面的代码测试了融合图在我的浏览器上是否正常工作。

您是否使用运行Safari的iOS设备对此进行了测试?

  

包含Column3d.swf,

的项目

看起来像 Flash 文件,iOS(和WebKit)支持Flash。

HTML5版本的website提示 - 因此,如果它们支持无Flash浏览器,那么您应该可以使用FusionChart使用MonoTouch(或iOS中的任何内容)执行您想要的操作。否则,您可能需要查看其他图表产品(或服务器端解决方案)。

答案 2 :(得分:0)

FusionCharts发布了一篇博文,展示如何在iOS设备中获取HTML5图表。

请在此处查看 - http://blog.fusioncharts.com/2012/02/create-charts-for-iphone-and-ipad-apps-using-fusioncharts-xt/