Изменить размер таблицы и место на ориентации - PullRequest
0 голосов
/ 18 ноября 2011

Я хочу создать одну таблицу программно и изменить ее в зависимости от изменения ориентации. проблема в том, что при запуске приложения таблица всегда отображается в одном и том же месте независимо от ее ориентации.

и я не понимаю, почему метод updateViewOnRotate вызывается 3 раза в первый раз.

код все в одном классе, UIViewController.

 - (void)viewDidLoad {

[[NSNotificationCenter defaultCenter] 
 addObserver:self 
 selector:@selector(updateViewOnRotate:)
 name:UIDeviceOrientationDidChangeNotification 
 object:nil];
[super viewDidLoad];
}

-(void) updateViewOnRotate:(NSNotification *)notification {
UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];  

if ((orientation == UIDeviceOrientationLandscapeLeft || orientation == UIDeviceOrientationLandscapeRight)) {  
    // present the other viewController, it's only viewable in landscape  
    [[self.view subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];
    // get rid of the landscape controller  
    UIView *opcionesView = [[[UIView alloc] initWithFrame:CGRectMake(100, 100, 250, self.view.frame.size.height)] autorelease];
    opcionesView.backgroundColor = UIColor.redColor;
    UITableView *table = [[[UITableView alloc] initWithFrame:CGRectMake(0, 50, 250, 500) style:UITableViewStylePlain] autorelease];

    [opcionesView addSubview:table];
    [self.view addSubview:opcionesView];
    [self dismissModalViewControllerAnimated:YES];      
}  
else{  

    [[self.view subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];

    UIView *opcionesView = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 250, self.view.frame.size.height)] autorelease];
    opcionesView.backgroundColor = UIColor.redColor;
    UITableView *table = [[[UITableView alloc] initWithFrame:CGRectMake(0, 50, 250, 500) style:UITableViewStylePlain] autorelease];

    [opcionesView addSubview:table];
    //      UINavigationBar *b=[[[UINavigationBar alloc]initWithFrame:CGRectMake(0, 0, 250, 50)]autorelease];
    //      [opcionesView addSubview:b];

    [self.view addSubview:opcionesView];

}  

  }

1 Ответ

0 голосов
/ 18 ноября 2011

Я пока не могу оставлять комментарии. Если бы я мог, это был бы один.

Почему вы не используете - (void) willAnimateRotationToInterfaceOrientation или другие обратные вызовы контроллера представления для этого? Может быть, это будет работать лучше.

...