какао получит листовое состояние - PullRequest
0 голосов
/ 29 февраля 2012

Есть ли способ определить состояние листа?Я знаю, что могу назвать этот метод:

- (void) customSheetDidClose : (NSWindow *)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo

, но я хочу сделать что-то вроде этого:

- (void) getInfoMethod { 

    //...do a lot of stuff to gather data

    [self openSheetMethod:dictionaryFullOfStuff];


    //I am completely making this up
    while([panFileDataEditor state] == open) { 
        //do nothing
    } 

}

- (void) openSheetMethod : (NSDictionary*) stuff { 

    //...do something with stuff

    [NSApp beginSheet: panFileDataEditor modalForWindow: window modalDelegate: self didEndSelector: @selector(customSheetDidClose:returnCode:contextInfo:) contextInfo: nil];

}

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

Ответы [ 2 ]

0 голосов
/ 01 марта 2012

Какао - это система, основанная на событиях, поэтому вы не ждете, чтобы что-то произошло в цикле while, вместо этого вы пишете методы, которые вызываются системой, когда что-то происходит. Так что нет пока циклы.

Вы реализуете customSheetDidClose: returnCode: contextInfo: метод (не вызывайте его) в своем классе, и он будет вызываться при закрытии листа.

Если вы хотите, чтобы пользовательские вещи происходили при открытом листе, создайте подкласс NSWindowController для обработки листа.

0 голосов
/ 29 февраля 2012
BOOL hasSheet = ([window attachedSheet] != nil);

предназначен только для проверки существования листа;-[NSWindow attachedSheet] вернет лист, если он там есть, или nil, если нет.Мне не ясно, какое «состояние» вы пытаетесь получить, но

NSWindow * theSheet = [window attachedSheet];

действительно дает вам сам лист.Оттуда вы можете делать все что угодно: [theSheet frame], например

...