2013-07-30 2 views
1

У меня есть UITableViewController, который является начальным контроллером для приложения под названием LoginTableViewController.Изменение UITableViews в зависимости от ориентации телефона

Я хочу показать один UITableView для портретного режима и другого для режима ландшафтного.

В настоящее время у меня есть еще UITableViewController (LoginTableViewController_L), созданный для ландшафтного режима. Я объявил UITableView с пейзажа UITableViewController в LoginTableViewController, надеясь, что я смогу переключить UITableViews в зависимости от ориентации. После поворота телефона я просто получаю черный/пустой экран с заголовком сверху.

Есть ли лучший способ приблизиться к этому?

@property (strong, nonatomic) IBOutlet UITableView *LoginTableView; 
@property (strong, nonatomic) IBOutlet UITableView *LoginTableView_Landscape; 
+1

Что касается «лучшего способа», почему бы не использовать один и тот же вид таблицы с соответствующими настройками макета для разных ориентаций? – jstevenco

+0

Похоже, что либо ваш источник данных в таблице viewview/делегаты не подключены, либо какая-то проблема с Autosizing .. –

+0

Я хотел иметь разный макет для пейзажного вида. Я не думаю, что могу это сделать с настройкой макета. –

ответ

1

Используйте один TableView.

Если вы хотите совершенно другой вид (а не только одни и те же клетки изменения размеров)

Detect ориентацию устройства и загружать различные элементы на основе текущей ориентации.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    static NSString *CellIdentifier = @"Cell"; 

    UIInterfaceOrientation interfaceOrientation = [[UIApplication sharedApplication] statusBarOrientation]; 

    if (UIInterfaceOrientationIsPortrait(interfaceOrientation)) { 

     PortraitCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
     if (cell == nil) 
     { 
      cell = [[PortraitCell alloc]init]; 
     } 

    } else { 

     LandscapeCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
     if (cell == nil) 
     { 
      cell = [[LandscapeCell alloc]init]; 
     } 
    } 

    return cell; 
} 

При изменении ориентации устройства звоните

[myTableView reloadData]; 

* PsudoCode, чтобы показать концепцию.