2012-10-02 20 views
8

Le mie app hanno funzionalità extra per l'iPhone 5 e ho creato una classe separata con un file .xib. Vorrei rilevare l'altezza dello schermo (a meno che non sia possibile ottenere l'ID/modello del dispositivo) e caricare di conseguenza un controller di visualizzazione diverso. Ho provato questo:Caricamento di un altro xib per l'iPhone 5

- (IBAction)select:(id)sender { 

CGRect screenRect = [[UIScreen mainScreen] bounds]; 
CGFloat screenWidth = screenRect.size.width; 
CGFloat screenHeight = screenRect.size.height; 

if (screenHeight == 960) { 

Selection *selectView =[[Selection alloc] initWithNibName:nil bundle:nil]; 
selectView.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; 
[self presentModalViewController:selectView animated:YES]; 

} 

else { 

    Selection_5 *selectView =[[Selection_5 alloc] initWithNibName:nil bundle:nil]; 
    selectView.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; 
    [self presentModalViewController:selectView animated:YES]; 

} 

} 

Selection e Selection_5 sono due classi diverse, ognuna con un xib diverso per l'interfaccia utente.

+0

Sì, ha funzionato. Ho usato float ScreenHeight = [UIScreen mainScreen] .bounds.size.height –

+0

questo è aiutare a risolvere questo problema http://stackoverflow.com/questions/13275144/how-to-make-xib-compatible- with-iphone-5-and-iphone-4-devices/13283851 # 13283851 –

risposta

5

provare http://github.com/erica/uidevice-extension/

[[UIDevice currentDevice] platformType] // ex: UIDevice4GiPhone 
[[UIDevice currentDevice] platformString] // ex: @"iPhone 4G" 

o si può solo guardare ScreenHeight come:

float screenHeight = [UIScreen mainScreen].bounds.size.height; 

per l'altezza iPhone 5 è 568

e forse shell per impostare pennino se si carica con un .xib come:

[[Selection alloc] initWithNibName:@"here_is_nibname" bundle:nil]; 
+0

Grazie, usando float screenHeight = [UIScreen mainScreen] .bounds.size.height ha funzionato. –

+0

in modalità orizzontale non posso in grado di ottenere l'esatta larghezza dispositivo si prega di qualsiasi uno parti come ottenere ... – Karthik

+0

nel paesaggio è necessario confrontare non con altezza 568, ma con larghezza di 568. –

8

Innanzitutto, non si desidera controllare il tipo di dispositivo. Cosa accadrebbe sui nuovi iPod touch (che hanno lo stesso schermo di dimensioni) o nei prossimi anni iPhone.

ma penso che il problema qui è che si sta controllando per le dimensioni dello schermo in base al numero di pixel che actualy - stranamente - non è quello che si vuole. Ricorda che su uno schermo Retina tutto è "raddoppiato". Nell'interfaccia utente tu (principalmente) usi la dimensione "normale" per tutto ciò che, in questo caso, è la metà del numero di pixel.

In breve: verificare la presenza di un altezza dello schermo di 480 (normale) o 568 (iPhone 5).

+0

Ah, ho finalmente capito quello che il 568 è stato riferimento! Lo sto usando per caricare un diverso xib per i dispositivi da 4 " –

5

Nella mia app devo caricare un file .XIB per iPhone, iPhone5/iPod Touch e iPad, per questo, questo è il codice che uso:

// If Iphone/iPod Touch 
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { 
    // If iPhone 5 or new iPod Touch 
    if([UIScreen mainScreen].bounds.size.height == 568){ 
    VCDadosViewController *extratoVC = [[VCDadosViewController alloc] initWithNibName:@"VCDadosViewControllerExt" bundle:nil]; 
    ... 
    } else{ 
    // Regular iPhone 
    VCDadosViewController *extratoVC = [[VCDadosViewController alloc] initWithNibName:@"VCDadosViewController" bundle:nil]; 
    ...   
    } 
// If iPad 
} else { 
    VCDadosViewController *extratoVC = [[VCDadosViewController alloc] initWithNibName:@"VCDadosViewControllerPad" bundle:nil]; 
    ... 
} 

Speranza che aiuta qualcuno che ha bisogno :)

3

Se hai questa convenzione di denominazione

VGArticlePage~ipad.xib 
VGArticlePage~iphone.xib 
VGArticlePage~iphone_ext.xib 

Poi si può fare in questo modo

#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) 
#define IS_IPHONE_5 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 568.0f) 

- (NSString *)nibNameForClass:(Class)class 
{ 
    if(IS_IPHONE && IS_IPHONE_5) 
    { 
     return [NSString stringWithFormat:@"%@%@", NSStringFromClass(class), @"~iphone_ext"]; 
    } 
    else if(IS_IPHONE) 
    { 
     return [NSString stringWithFormat:@"%@%@", NSStringFromClass(class), @"~iphone"]; 
    } 
    else 
    { 
     return [NSString stringWithFormat:@"%@%@", NSStringFromClass(class), @"~ipad"]; 
    } 
} 
+0

Se il metodo nibNameForClass è posto come una funzione statica in una classe Util, potrebbe essere usato ovunque nell'applicazione. Preferisco questo per la soluzione di gmogames. – Zuppa

Problemi correlati