【问题标题】:Problem creating gui from xml -> Strange CPButton behaviour从 xml 创建 gui 时出现问题 -> 奇怪的 CPButton 行为
【发布时间】:2010-05-01 21:51:40
【问题描述】:

你好,

我是 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];

}

@implementation Button : CPObject
{
    CPButton _button;
}

- (Button)InitWithParent:(CPView)contentView Text:(CPString)text X:
(int)x Y:(int)y Width:(int)width Height:(int)height
{
    _button = [[CPButton alloc] initWithFrame:
CGRectMake(x,y,width,height)];
    [_button setTitle:text];
    [_button setTarget:self];
    [_button setAction:@selector(cmdNext_onClick:)];
    [contentView addSubview:_button];
    return self;
}

- (void)cmdNext_onClick:(id)sender
{
}
@end

【问题讨论】:

  • 您的 XML 阅读器不会生成字符串而不是整数吗?我会在没有 XML 部分的情况下测试按钮代码。
  • Thx,我刚刚修复了它....你是对的,字符串值必须先转换为 Number,然后才能将它们传递给 CGRectMake。令人困惑的是,无论如何按钮都被正确绘制了,但只有鼠标事件不起作用......

标签: javascript cappuccino objective-j


【解决方案1】:

Cappuccino 免费为您提供大部分功能。

您可以使用CPURLConnection 加载文件。

另外Atlas(或Interface Builder和nib2cib)会自动为您创建cib文件,Cappuccino本身已经知道如何从cib文件构建它的用户界面。

如果您真的想实现自己的系统来执行此操作,您能否提供您尝试加载的实际 XML?也尝试在不使用 XML 的情况下加载按钮。例如:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多