2009-06-24 19 views
6

Ho spostato una vista di avviso leggermente più in alto in modo da poter inserire anche una tastiera sullo schermo. Lo faccio afferrando il fotogramma dell'avviso e modificando Y dopo che ho già mostrato l'avviso in modo che le variabili del frame siano legittime. Funziona perfettamente con il simulatore, ma quando lo faccio sull'hardware, l'avviso inizia nella posizione corretta, ma poi quasi immediatamente salta al suo posto centrale verticale originale. L'UIAlertView posiziona una cosa fissa che non dovrebbe cambiare in base alle linee guida di usabilità o sto semplicemente facendo qualcosa in modo errato?Posso spostare un UIAlertView?

Grazie!

risposta

22

Quale sistema operativo si sta provando questo contro? Ho avuto questo lavoro sia sul simulatore OS 3.0 e dispositivo di OS 3.0:

UIAlertView * alert = [ [ UIAlertView alloc ] initWithTitle:@"Alert" message:@"Alert" 
         delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil ]; 

alert.transform = CGAffineTransformTranslate(alert.transform, 0.0, 100.0); 

[ alert show ]; 

CGAffineTransformTranslate prende tre argomenti: la trasformazione esistente, una x trasformare, e un y trasformazione. Nell'esempio che ho usato, la vista di avviso appariva 100 pixel più alta di quanto normalmente farebbe. Fai una prova e vedi cosa succede.

Inoltre, sono abbastanza certo che è possibile modificare la cornice prima di mostrare l'avviso in quanto è probabile che imposti il ​​frame di avviso in init per essere il centro dell'intero schermo per impostazione predefinita.

+0

Grazie alla trasformazione ha fatto il trucco, per qualche motivo lo spostamento utilizzando le coordinate del telaio è stato il problema. – Skyler

+0

ha funzionato anche per me in ios 3.0, ma per qualche motivo non funziona in iOS 4.0 .... –

1

Non è un avviso destinato a essere modal - vale a dire: in genere non si eseguono altri input da parte dell'utente quando è attivo un avviso? Se questo è il caso, perché dovresti aver bisogno di visibilità della tastiera?

+3

Se ha aggiunto un campo di testo come sottoview della visualizzazione di avviso, ha senso volere vedere la tastiera proprio come fa l'App Store quando richiede la password di iTunes prima di scaricare un'app. – LucasTizma

+0

Grazie per il commento - non avevo pensato a quello scenario. – teabot

2

Da quando iOS4 si sposta su UIAlertViews diventa complicato. Ho notato che se si aggiunge una sottoview UITextField su UIAlertView, su iOS4 l'avviso viene spostato verso l'alto in modo che la tastiera non si sovrapponga. Questo non succede < iOS4.

Inoltre, ho notato che il frame dell'avviso non è inizializzato anche dopo che è stato chiamato lo show, quindi non esiste un modo semplice per programmare un CGAffineTransformation relativo. L'unica soluzione sarebbe quella di eseguire trasformazioni condizionali basate sulla versione del sistema operativo.

Per me sembra che si tratti di un comportamento non documentato di UIAlertViews che è soggetto a modifiche in qualsiasi momento. Non credo che Apple intendesse che usassimo gli avvisi per qualcosa di più dei testi e dei pulsanti (anche se le loro stesse applicazioni infrangono questa regola).

I per uno inizierà a creare avvisi personalizzati per questo tipo di scenari.