Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从xml创建gui时出现问题->奇怪的CPButton行为_Javascript_Cappuccino_Objective J - Fatal编程技术网

Javascript 从xml创建gui时出现问题->奇怪的CPButton行为

Javascript 从xml创建gui时出现问题->奇怪的CPButton行为,javascript,cappuccino,objective-j,Javascript,Cappuccino,Objective J,你好 我对objective-j和卡布奇诺还不熟悉,只是想创造一个 小型应用程序,从xml文件动态创建gui 不幸的是,它只能部分起作用。好像按钮坏了 区域是无序的。这意味着,如果 我点击按钮旁边的按钮 请帮帮我。我不明白 - (void)applicationDidFinishLaunching:(CPNotification)aNotification { mControlList = [CPArray alloc]; theWindow = [[CPWindow allo

你好

我对objective-j和卡布奇诺还不熟悉,只是想创造一个 小型应用程序,从xml文件动态创建gui

不幸的是,它只能部分起作用。好像按钮坏了 区域是无序的。这意味着,如果 我点击按钮旁边的按钮

请帮帮我。我不明白

- (void)applicationDidFinishLaunching:(CPNotification)aNotification
{

    mControlList = [CPArray alloc];

   theWindow = [[CPWindow alloc] initWithContentRect:CGRectMakeZero()
    styleMask:CPBorderlessBridgeWindowMask],
    contentView = [theWindow contentView];
    [contentView setFrame:[[contentView superview] bounds]];
    [contentView setAutoresizingMask:CPViewWidthSizable |
CPViewHeightSizable];


    // Loadxmlfile
    var xhttp;
    if (window.XMLHttpRequest)
    {
        xhttp=new XMLHttpRequest()
    }
    else
    {
        xhttp=new ActiveXObject("Microsoft.XMLHTTP")
    }
    xhttp.open("GET","test.xml",false);
    xhttp.send("");
    xmlDoc = xhttp.responseXML;

    //Get controls nodeand iterate through all controls
    var node = xmlDoc.getElementsByTagName("controls")[0];
    for (var i=0; i<node.childNodes.length; i++) {
        if(node.childNodes[i].nodeName=="button"){
            var item = node.childNodes[i];

            var name = item.attributes["name"].nodeValue;
            var text = item.getElementsByTagName("text")
[0].childNodes[0].nodeValue;
            var x=      item.getElementsByTagName("rect")
[0].attributes["x"].nodeValue;
            var y=      item.getElementsByTagName("rect")
[0].attributes["y"].nodeValue;
            var width=  item.getElementsByTagName("rect")
[0].attributes["width"].nodeValue;
            var height= item.getElementsByTagName("rect")
[0].attributes["height"].nodeValue;

            var b = [[Button alloc] InitWithParent:contentView Text:text X:x
Y:y Width:width Height:height];
            [mControlList addObject:b];
        }
    }

    [theWindow orderFront:self];

}

卡布奇诺免费为您提供大部分功能

您可以使用加载文件

另外,或者nib2cib将自动为您创建cib文件,卡布奇诺本身已经知道如何从cib文件构建其UI

如果您真的想实现自己的系统来实现这一点,您能提供您试图加载的实际XML吗?还可以尝试在不使用XML的情况下加载按钮。例如:

var myButton = [CPButton buttonWithTitle:@"My Cool Button"];
[contentView addSubview:myButton];

+buttonWithTitle:将自动在已初始化的按钮上调用-sizeToFit,因此您可以将其添加到contentView中,并以适当的大小显示它。

您的XML读取器不会生成字符串而不是整数吗?我会在没有XML部分的情况下测试按钮代码。Thx,我刚刚修复了它。。。。没错,在将字符串值传递给CGRectMake之前,必须将其转换为数字。令人困惑的是,无论如何按钮都画得正确,但只有鼠标事件不起作用。。。
var myButton = [CPButton buttonWithTitle:@"My Cool Button"];
[contentView addSubview:myButton];