Benvenuto Visitatore ( Log In | Registrati )
![]() ![]() |
23 Feb 2008, 10:25
Messaggio
#1
|
|
|
Level 1/11 ![]() Gruppo: Forum User Messaggi: 15 Iscritto il: 6-February 08 Utente Nr.: 9.619 |
ciao a tutti e scusate se vi assillo con domande banali...
Vorrei fare in modo di leggere il contenuto di una NSTextField contenuta in una NSWindow, SOLO QUANDO l'utente preme il bottone OK. Per fare ciò sto cercando di utilizzare una sheet. Ho quindi 2 classi: MRMainController (che funge da controllore per la finestra principale) e MRInputBoxController (che funge da controllore per la finestra "di input") il problema è che non riesco a fare in modo che la sheet sia "modale". Se nel metodo che visualizza la sheet scrivo: CODICE [NSApp beginSheet:inputWindow modalForWindow:[NSApp mainWindow] modalDelegate:self didEndSelector:NULL contextInfo:nil]; NSRunAlertPanel(@"prova",[inputText stringValue] ,@"OK",nil,nil); dove "inputWindow" è l'outlet che punta alla sheet e "inputText" è l'outlet che punta alla NSTextField, il messaggio viene visualizzato immediatamente dopo l'apertura della sheet, e non dopo che essa viene chiusa. grazie anticipatamente Marcello |
|
|
|
|
|
|
23 Feb 2008, 11:01
Messaggio
#2
|
|
|
Per fare che il messaggio appaia dopo la chiusura dello sheet devi, ad esempio, creare un bottone "Ok" nello sheet e un'azione tipo questa:
CODICE - (IBAction):chiudiSheet:(id)sender
{ [NSApp endSheet:inputWindow]; [inputWindow orderOut:nil]; NSRunAlertPanel(@"prova",[inputText stringValue] ,@"OK",nil,nil); } -------------------- Regolamento di Tevac - Emanuele
|
|
|
|
|
23 Feb 2008, 11:14
Messaggio
#3
|
|
|
Level 1/11 ![]() Gruppo: Forum User Messaggi: 15 Iscritto il: 6-February 08 Utente Nr.: 9.619 |
Per fare che il messaggio appaia dopo la chiusura dello sheet devi, ad esempio, creare un bottone "Ok" nello sheet e un'azione tipo questa: CODICE - (IBAction):chiudiSheet:(id)sender { [NSApp endSheet:inputWindow]; [inputWindow orderOut:nil]; NSRunAlertPanel(@"prova",[inputText stringValue] ,@"OK",nil,nil); } Naturalmente avevo già creato il bottone OK per terminare lo sheet. Il codice era solo un esempio per far capire che l'esecuzione del programma prosegue anche dopo aver visualizzato lo sheet "modale" (e quindi visualizza il messaggio che sta nella classe chiamante), mentre io vorrei che l'esecuzione del codice della classe chiamante rimanesse "sospesa" fino a quando lo sheet viene chiuso. Infatti io vorrei leggere il valore della TextField dalla classe chiamante DOPO che lo sheet viene chiuso. spero di essemi spiegato grazie comunque Marcello |
|
|
|
23 Feb 2008, 11:31
Messaggio
#4
|
|
|
Level 1/11 ![]() Gruppo: Forum User Messaggi: 15 Iscritto il: 6-February 08 Utente Nr.: 9.619 |
[NSApp beginSheet:inputWindow modalForWindow:[NSApp mainWindow] modalDelegate:self didEndSelector:NULL contextInfo:nil]; NSRunAlertPanel(@"prova",[inputText stringValue] ,@"OK",nil,nil); Tanto per chiarire: se sostituisco la beginSheet con CODICE int retCode; retCode = [NSApp runModalForWindow:inputWindow]; il messaggio viene visualizzato correttamente dopo che ho premuto OK, solo che non viene visualizzato uno sheet (che è più figo....) ma una finestra normale |
|
|
|
23 Feb 2008, 17:36
Messaggio
#5
|
|
|
Level 1/11 ![]() Gruppo: Forum User Messaggi: 15 Iscritto il: 6-February 08 Utente Nr.: 9.619 |
[NSApp beginSheet:inputWindow modalForWindow:[NSApp mainWindow] modalDelegate:self didEndSelector:NULL contextInfo:nil]; NSRunAlertPanel(@"prova",[inputText stringValue] ,@"OK",nil,nil); Tanto per chiarire: se sostituisco la beginSheet con int retCode; retCode = [NSApp runModalForWindow:inputWindow]; il messaggio viene visualizzato correttamente dopo che ho premuto OK, solo che non viene visualizzato uno sheet (che è più figo....) ma una finestra normale Ok, ho risolto. Era anche piuttosto ovvio.....basta utilizzare insieme i metodi. quindi: CODICE // VISUALIZZA LO SHEET [NSApp beginSheet:inputWindow modalForWindow:[NSApp mainWindow] modalDelegate:self didEndSelector:NULL contextInfo:nil]; //RENDE LO SHEET MODALE retCode = [NSApp runModalForWindow:inputWindow]; [NSApp endSheet:connectionPanel]; /* VISUALIZZA UN MESSAGGIO CON IL TESTO DIGITATO NELLO SHEET QUANDO LO SHEET VIENE CHIUSO */ NSRunAlertPanel(@"TITOLO",[inputText stringValue],@"OK",nil,nil); Marcello |
|
|
|
24 Feb 2008, 17:29
Messaggio
#6
|
|
|
// VISUALIZZA LO SHEET [NSApp beginSheet:inputWindow modalForWindow:[NSApp mainWindow] modalDelegate:self didEndSelector:NULL contextInfo:nil]; Quando viene eseguito questo codice parte la finestra modale con il suo "run loop". Quest'istruzione torna subito al chiamante. Come parametro didEndSelector: devi passare il metodo della classe delegata, in questo caso self, che verra' invocato quando la finestra modale verra chiusa (orderOut:). Cpu86 -------------------- L'informatica non riguarda i computer più di quanto l'astronomia riguardi i telescopi. (Edsger Wybe Dijkstra)
« Tra molto tempo- per esempio tra diecimila anni- non c'è dubbio che la scoperta delle equazioni di Maxwell sarà giudicato l'evento più significativo del XIX secolo. La guerra civile americana apparirà insignificante e provinciale se paragonata a questo importante evento scientifico della medesima decade. » (Richard Feynman) |
|
|
|
|
24 Feb 2008, 21:44
Messaggio
#7
|
|
|
Level 1/11 ![]() Gruppo: Forum User Messaggi: 15 Iscritto il: 6-February 08 Utente Nr.: 9.619 |
// VISUALIZZA LO SHEET [NSApp beginSheet:inputWindow modalForWindow:[NSApp mainWindow] modalDelegate:self didEndSelector:NULL contextInfo:nil]; Quando viene eseguito questo codice parte la finestra modale con il suo "run loop". Quest'istruzione torna subito al chiamante. Come parametro didEndSelector: devi passare il metodo della classe delegata, in questo caso self, che verra' invocato quando la finestra modale verra chiusa (orderOut:). Cpu86 Ah! Ora provo. Grazie del chiarimento Marcello |
|
|
|
24 Feb 2008, 22:15
Messaggio
#8
|
|
|
Level 1/11 ![]() Gruppo: Forum User Messaggi: 15 Iscritto il: 6-February 08 Utente Nr.: 9.619 |
Ho fatto come dici, ma il messaggio non viene visualizzato.... sicuramente mi sfugge qualcosa di elementare.
Il codice della classe chiamante è questo: CODICE - (IBAction)openPanel:(id)sender { [NSApp beginSheet:inputPanel modalForWindow:[NSApp mainWindow] modalDelegate:self didEndSelector:@selector(sheetDidEnd:) contextInfo:nil]; } - (void)sheetDidEnd:(NSWindow *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo { NSRunAlertPanel(@"TITOLO",@"PROVA MESSAGGIO",@"OK",nil,nil); } il codice del metodo di chiusura nella classe controllore del pannello è questo: - (IBAction)closePanel:(id)sender { id aWindow = [sender window]; [aWindow orderOut:nil]; [NSApp endSheet:aWindow]; } Ne approfitto per fare un'altra domanda: in Tiger (Xcode 2) se nel file nib ho 2 NSWindow, all'avvio dell'applicazione si apre solo quella principale e l'altra la posso visualizzare come sheet quando voglio io. In Leopard (Xcode 3) se ci sono 2 NSWindow nel nib, vengono visualizzate tutte e 2 all'avvio! non sono riuscito a trovare il modo di farne vedere solo una.... grazie anticipatamente Marcello |
|
|
|
25 Feb 2008, 11:11
Messaggio
#9
|
|
|
Ho fatto come dici, ma il messaggio non viene visualizzato.... sicuramente mi sfugge qualcosa di elementare. Il codice della classe chiamante è questo: CODICE - (IBAction)openPanel:(id)sender { [NSApp beginSheet:inputPanel modalForWindow:[NSApp mainWindow] modalDelegate:self didEndSelector:@selector(sheetDidEnd:) contextInfo:nil]; } - (void)sheetDidEnd:(NSWindow *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo { NSRunAlertPanel(@"TITOLO",@"PROVA MESSAGGIO",@"OK",nil,nil); } il codice del metodo di chiusura nella classe controllore del pannello è questo: - (IBAction)closePanel:(id)sender { id aWindow = [sender window]; [aWindow orderOut:nil]; [NSApp endSheet:aWindow]; } Per forza, tu gli hai detto che hai un metodo chiamato "sheetDidEnd:", peccato che invece ne hai uno chiamato sheetDidEnd:returnCode:contextInfo:, quindi @selector(sheetDidEnd:returnCode:contextInfo:) Ne approfitto per fare un'altra domanda: in Tiger (Xcode 2) se nel file nib ho 2 NSWindow, all'avvio dell'applicazione si apre solo quella principale e l'altra la posso visualizzare come sheet quando voglio io. In Leopard (Xcode 3) se ci sono 2 NSWindow nel nib, vengono visualizzate tutte e 2 all'avvio! non sono riuscito a trovare il modo di farne vedere solo una.... grazie anticipatamente Marcello Mai usato IB di Leopard, non e' che tra le preferenze c'e' qualcosa come "show at launch time"? Cpu86 -------------------- L'informatica non riguarda i computer più di quanto l'astronomia riguardi i telescopi. (Edsger Wybe Dijkstra)
« Tra molto tempo- per esempio tra diecimila anni- non c'è dubbio che la scoperta delle equazioni di Maxwell sarà giudicato l'evento più significativo del XIX secolo. La guerra civile americana apparirà insignificante e provinciale se paragonata a questo importante evento scientifico della medesima decade. » (Richard Feynman) |
|
|
|
|
25 Feb 2008, 12:00
Messaggio
#10
|
|
|
Level 1/11 ![]() Gruppo: Forum User Messaggi: 15 Iscritto il: 6-February 08 Utente Nr.: 9.619 |
Mai usato IB di Leopard, non e' che tra le preferenze c'e' qualcosa come "show at launch time"? Cpu86 Ecco appunto... ero sicuro di aver commesso un errore da fesso.... Per quanto riguarda IB di Leopard ho controllato tutti i flag che possono a mio parere influenzare la visualizzazione della finestra all'avvio, ma senza risultato. Ora sono sul macbook e ho tiger, stasera a casa riproverò a ripassare tutte le opzioni su Leopard. Ti ringrazio moltissimo per la disponibilità. ciao Marcello Messaggio modificato da poweruser il 25 Feb 2008, 20:14
Motivo della modifica: Accorciato il quoting
|
|
|
|
25 Feb 2008, 21:10
Messaggio
#11
|
|
|
Level 1/11 ![]() Gruppo: Forum User Messaggi: 15 Iscritto il: 6-February 08 Utente Nr.: 9.619 |
Mai usato IB di Leopard, non e' che tra le preferenze c'e' qualcosa come "show at launch time"? Cpu86 Ecco appunto... ero sicuro di aver commesso un errore da fesso.... Per quanto riguarda IB di Leopard ho controllato tutti i flag che possono a mio parere influenzare la visualizzazione della finestra all'avvio, ma senza risultato. Ora sono sul macbook e ho tiger, stasera a casa riproverò a ripassare tutte le opzioni su Leopard. Ti ringrazio moltissimo per la disponibilità. ciao Marcello Non so cosa mi sta succedendo.... sarò stressato dal lavoro..... Ho passato la serata alla ricerca di un maledetto flag che alla fine era proprio lì che mi guardava ridendo di me..... semplicemente: Visible at Launch grazie ancora per la pazienza Marcello |
|
|
|
![]() ![]() |
| Titolo discussione | Risposte | Autore discussione | Visite | Ultima azione | |||
|---|---|---|---|---|---|---|---|
![]() |
5 | fab72 | 128 | 22 October 2008 - 23:18 Ultimo messaggio di: alcina |
|||
![]() |
0 | TevacPhoto | 30 | 27 September 2008 - 15:56 Ultimo messaggio di: TevacPhoto |
|||
![]() |
0 | TevacPhoto | 17 | 27 September 2008 - 15:56 Ultimo messaggio di: TevacPhoto |
|||
![]() |
4 | NSLuca | 251 | 4 August 2008 - 14:25 Ultimo messaggio di: NSLuca |
|||
![]() |
11 | marg | 970 | 2 July 2008 - 07:11 Ultimo messaggio di: marg |
|||
![]() |
4 | germinara | 238 | 22 June 2008 - 13:29 Ultimo messaggio di: sirguich_ |
|||
![]() |
2 | sirguich_ | 230 | 9 June 2008 - 22:14 Ultimo messaggio di: sirguich_ |
|||
![]() |
10 | Ale93 | 278 | 1 June 2008 - 22:15 Ultimo messaggio di: Ale93 |
|||
![]() |
11 | Cpu86 | 555 | 23 March 2008 - 10:14 Ultimo messaggio di: Cpu86 |
|||
![]() |
2 | nutsmuggler | 358 | 12 March 2008 - 15:17 Ultimo messaggio di: nutsmuggler |
|||
![]() |
5 | marg | 396 | 7 February 2008 - 15:16 Ultimo messaggio di: poweruser |
|||
![]() |
2 | simotessa | 413 | 25 January 2008 - 14:23 Ultimo messaggio di: simotessa |
|||
|
Versione Lo-Fi | Oggi è il: 8 January 2009 - 19:45 |
| IP.Board Skin Developed By Creative Networks | ||