2012-02-29 1 views
0

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

- (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 для моего листа, я думал, что я мог бы получить его кадр и проверить местоположение у определить его статус, но я хотел, чтобы проверить, есть ли общепринятый способ сделать это ...

+0

Я переформулировал вопрос о google и получил следующее: BOOL hasSheet = ([window attachSheet]! = Nil); – PruitIgoe

+0

я перефразировать вопрос на Google и получил это: BOOL hasSheet = (! [Окно attachedSheet] = ноль) ;, изменил код для этого: в то время как ([WinMain attachedSheet] = ноль!) { \t \t \t \t NSLog (@ «лист открыт»); \t \t \t} но я тогда ничего не могу сделать в самом листе – PruitIgoe

ответ

0
BOOL hasSheet = ([window attachedSheet] != nil); 

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

NSWindow * theSheet = [window attachedSheet]; 

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

0

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

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

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