Проблема создания графического интерфейса из xml -> Странное поведение CPButton - PullRequest
0 голосов
/ 02 мая 2010

Алло,

Я новичок в Objective-J и капучино небольшое приложение, которое динамически создает графический интерфейс из XML-файла.

К сожалению, это работает только частично. Кажется, что кнопка регионы беспорядочные. Это означает, что кнопки также реагируют, если Я нажимаю помимо кнопки ....

Пожалуйста, помогите мне. Я не понимаю ..

- (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

1 Ответ

0 голосов
/ 10 мая 2010

Капучино дает вам большую часть этой функциональности бесплатно.

Вы можете загружать файлы, используя CPURLConnection .

Также Atlas (или Interface Builder и nib2cib) автоматически создаст для вас файлы cib, само Cappuccino уже знает, как создать свой пользовательский интерфейс из файлов cib.

Если вы действительно хотите реализовать свою собственную систему, не могли бы вы предоставить фактический XML, который вы пытаетесь загрузить? Также попробуйте загрузить кнопку без использования XML. Например:

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

+ buttonWithTitle: автоматически вызовет - sizeToFit для инициализированной кнопки, так что вы можете просто добавить ее в свой contentView, и она должна быть видна с соответствующим размером.

...