¿Cómo puedo cargar un xib horizontal usando un archivo ViewController?

Tengo una aplicación universal. Estoy usando xibs separados para las vistas vertical y horizontal. Tengo la aplicación detectando la orientación y cambiando el valor de un BOOL a verdadero cuando estoy en paisaje. quiero saber como cargar mi xib paisaje cuando eso BOOL es verdad. He intentado varios métodos diferentes para lograr esto, pero nada ha funcionado. Cualquier aporte sobre este asunto sería muy apreciado. Puedo actualizar esta publicación para incluir los fragmentos de código necesarios. Gracias por adelantado.

editar: quiero hacer todo esto en una clase ViewController, y solo para el iPad... no para el iPhone. Tengo toda esa parte resuelta. Solo necesito cargar el paisaje xib.

editar: en mi viewDidLoad Estoy haciendo esto:

if (userDevice.orientation == UIDeviceOrientationLandscapeLeft || userDevice.orientation == UIDeviceOrientationLandscapeRight) {
    landscape = YES;
}

Aquí está mi controlador de vista principal .m:

@implementation PassportAmericaViewController

@synthesize browseViewButton, webView, mainView, lblMemberName, menuOpen, internetActive, hostActive, isUsingiPad, portrait, landscape;


- (void)viewDidLoad {
menuOpen = NO;

UIDevice* userDevice = [UIDevice currentDevice];
if (userDevice.userInterfaceIdiom == UIUserInterfaceIdiomPad) {
    isUsingiPad = YES;
}
if (isUsingiPad)
    if (userDevice.orientation == UIDeviceOrientationLandscapeLeft || userDevice.orientation == UIDeviceOrientationLandscapeRight) {
        landscape = YES;

    }
[self checkForKey];
[super viewDidLoad];
[self.navigationController setNavigationBarHidden:YES];
}

-(void)viewWillAppear:(BOOL)animated{

[self.navigationController setNavigationBarHidden:YES];
}

-(void) checkForKey{

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
int regCheck = [defaults integerForKey:@"registration"];
if (isUsingiPad) {
    if (regCheck == 0) {

        RegistrationViewController *regView = [[RegistrationViewController alloc]
                                               initWithNibName:@"RegistrationView-iPad" bundle:[NSBundle mainBundle]];
        regView.isUsingiPad = YES;
        [self.navigationController pushViewController:regView animated:YES];

    }else if (regCheck == 1) {
        @try {
            NSString *mbrFirstName = [defaults objectForKey:@"firstName"];
            NSString *mbrLastName = [defaults objectForKey:@"lastName"];

            NSMutableString *name = [[NSMutableString alloc] initWithString:mbrFirstName];
            [name appendString:@" "];
            [name appendString:mbrLastName];

            lblMemberName.text = name;
        }
        @catch (NSException *exception) {

        }        
    }
}else{
    if (regCheck == 0) {

        RegistrationViewController *regView = [[RegistrationViewController alloc]
                                               initWithNibName:@"RegistrationView" bundle:[NSBundle mainBundle]];
        [self.navigationController pushViewController:regView animated:YES];

    }else if (regCheck == 1) {
        @try {
            NSString *mbrFirstName = [defaults objectForKey:@"firstName"];
            NSString *mbrLastName = [defaults objectForKey:@"lastName"];

            NSMutableString *name = [[NSMutableString alloc] initWithString:mbrFirstName];
            [name appendString:@" "];
            [name appendString:mbrLastName];

            lblMemberName.text = name;
        }
        @catch (NSException *exception) {

        }        
    }
}
}

-(IBAction) openBrowseView{

if (isUsingiPad && landscape) {
        BrowseViewController *browseView = [[BrowseViewController alloc]
                                            initWithNibName:@"BrowseView-iPadLandscape" bundle:[NSBundle mainBundle]];
        browseView.isUsingiPad = YES;
        [self.navigationController pushViewController:browseView animated:YES];
    }else if (isUsingiPad){
    BrowseViewController *browseView = [[BrowseViewController alloc]
                                        initWithNibName:@"BrowseView-iPad" bundle:[NSBundle mainBundle]];
    browseView.isUsingiPad = YES;
    [self.navigationController pushViewController:browseView animated:YES];
    }else{
    BrowseViewController *browseView = [[BrowseViewController alloc]
                                        initWithNibName:@"BrowseView" bundle:[NSBundle mainBundle]];
    [self.navigationController pushViewController:browseView animated:YES];

}
}     

-(IBAction) openViewMore{

if (isUsingiPad) {
    ViewMoreViewController *viewMoreView = [[ViewMoreViewController alloc]
                                            initWithNibName:@"ViewMoreView-iPad" bundle:[NSBundle mainBundle]];
    [self.navigationController pushViewController:viewMoreView animated:YES];
    viewMoreView.isUsingiPad = YES;
}else{
    ViewMoreViewController *viewMoreView = [[ViewMoreViewController alloc]
                                            initWithNibName:@"ViewMoreView" bundle:[NSBundle mainBundle]];
    [self.navigationController pushViewController:viewMoreView animated:YES];
}       
}

-(IBAction) callTollFree:(id)sender {

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel:8002837183"]];

}

-(IBAction)clickToJoin:(id)sender {

if (isUsingiPad) {
    webView = [[WebViewController alloc]
               initWithNibName:@"WebView-iPad" bundle:[NSBundle mainBundle]];
    webView.url=@"http://www.passport-america.com/Members/JoinRenew.aspx";
    [self.navigationController pushViewController:webView animated:YES];
    webView.isUsingiPad = YES;
}else {
    webView = [[WebViewController alloc]
               initWithNibName:@"WebView" bundle:[NSBundle mainBundle]];
    webView.url=@"http://www.passport-america.com/Members/JoinRenew.aspx";
    [self.navigationController pushViewController:webView animated:YES];
}
}

-(IBAction) iPadContactUs:(id)sender {

[[UIApplication sharedApplication] openURL:[NSURL URLWithString: @"mailto:info@passport-america.com"]];

}

-(void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context {
if ([animationID isEqualToString:@"slideMenu"]){
    UIView *sq = (__bridge UIView *) context;
    [sq removeFromSuperview];

}
}

-(void) positionViews {

if (isUsingiPad) {
    UIInterfaceOrientation destOrientation = self.interfaceOrientation;
    if (destOrientation == UIInterfaceOrientationPortrait || destOrientation == UIInterfaceOrientationPortraitUpsideDown) {
        PassportAmericaViewController *homeView2 = [[PassportAmericaViewController alloc]
                                             initWithNibName:@"PassportAmericaViewController-iPad" bundle:[NSBundle mainBundle]];
        [self.navigationController pushViewController:homeView2 animated:YES];
        homeView2.isUsingiPad = YES;
        homeView2.portrait = YES;
        homeView2.landscape = NO;
    }else{
        PassportAmericaViewController *homeView2 = [[PassportAmericaViewController alloc]
                                             initWithNibName:@"PassportAmericaViewController-iPadLandscape" bundle:[NSBundle mainBundle]];
        [self.navigationController pushViewController:homeView2 animated:YES];
        homeView2.isUsingiPad = YES;
        homeView2.portrait = NO;
        homeView2.landscape = YES;

    }
}
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
if (isUsingiPad) {
    return YES;
}else{
    // Return YES for supported orientations
    return NO;
}
}

-(void) willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration: (NSTimeInterval)duration {
if (isUsingiPad) {
    [self positionViews];
}else{

}
}

- (void)didReceiveMemoryWarning {
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];

// Release any cached data, images, etc that aren't in use.
}


@end

preguntado el 03 de mayo de 12 a las 17:05

1 Respuestas

Editar

Parece que tienes que hacer tu trabajo aquí.

BOOL isLandscape = UIInterfaceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation);
NSString *nibName = isLandscape ? @"landscapeNibName" : @"portraitNibName";

RegistrationViewController *regView = [[RegistrationViewController alloc] initWithNibName:nibName bundle:[NSBundle mainBundle]];

No estoy seguro de dónde te estás atascando...

- (id)init;
{
    BOOL isLandscape = UIInterfaceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation);
    NSString *nibName = isLandscape ? @"landscapeNibName" : @"portraitNibName";
    
    self = [super initWithNibName:nibName bundle:nil];
    if (self) {
        // any other init stuff
    }
    return self;
}

o si prefiere nombrar el plumín cuando crea una instancia

BOOL isLandscape = UIInterfaceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation);
NSString *nibName = isLandscape ? @"landscapeNibName" : @"portraitNibName";

MyViewController *viewController = [[MyViewController alloc] initWithNibName:nibName bundle:nil];

Respondido el 20 de junio de 20 a las 10:06

Me estoy quedando atascado en dónde cargar el nuevo xib. Tengo el BOOL llamado paisaje ya configurado en sí. Intenté cargar el xib en viewWillAppear e incluso intenté configurar una declaración if en viewDidLoad para intentar que anule el xib original. Me quedo atascado en un bucle infinito. - oso de conteo

¿Desea cargar el controlador de vista en una determinada orientación? o estás tratando de hacer frente a los cambios de orientación? - Pablo.s

Cuando la orientación es horizontal, quiero que cargue el xib horizontal en lugar del xib vertical. Los cambios de orientación los tengo bajo control. Cuando se carga la aplicación, puedo cambiar al xib horizontal desde el xib vertical sin problemas. Solo quiero omitir el retrato xib por completo cuando estoy en paisaje. Si lo soluciono... Puedo pasar ese paisaje BOOL y ser salsa a partir de ese momento. - oso de conteo

Entonces, ¿has probado el código anterior? Ambos cargarán la punta correcta. Use el primero colocándolo en el método de inicio de viewcontrollers o use el segundo método en el punto donde realmente asigna/inicia el controlador de vista: Pablo.s

Lo probé, pero no tengo un método init. Intenté hacer algunas cosas en viewDidLoad, pero eso me hace caer en un bucle infinito. Intenté crear un método init pero nunca se llama a menos que lo llame en viewDidLoad... lo que también provoca un bucle. Nunca había intentado hacer esto antes... por eso tengo tantos problemas. ja ja. - oso de conteo

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.