Pull to refresh

Легким движением руки UITabBarController превращается в UISplitViewController

Reading time3 min
Views1.9K
Доброй ночи/утра/дня/вечера

Как видно из названия статьи я расскажу вам о том, как потратив минимум сил и времени, превратить iPhone`ский UITabBarController в iPad`овский “UISplitViewController”
Для этого нам понадобится: проект(под iPad) с предыдущего моего рассказа, xib файл(под iPhone) с UITabBarController'ом и класс-контроллер к нему. Первое у меня было. Что касается второго и третьего, то я быстро создал xib в Interface Builder'е и дал ему незамысловатое имя iPhoneTabBar.xib.




Так как наш UITabBarController создавался лишь для демонстрации, то я…
вообщем нихреначего он не умеет делать. Единственное что я добавил — это UIAlertView, которое выскакивает при нажатии на кнопку Click Me(находится на одной из закладок). Код приведен ниже

iPhoneTabBar.h
#import <UIKit/UIKit.h>

@interface iPhoneTabBar : UITabBarController {  }
-(IBAction) showAlert;
@end


* This source code was highlighted with Source Code Highlighter.

iPhoneTabBar.m
#import "iPhoneTabBar.h"
@implementation iPhoneTabBar
-(IBAction) showAlert{
  UIAlertView* alert= [[UIAlertView alloc] initWithTitle:@"Title"
                         message:@"message"
                         delegate:nil
                    cancelButtonTitle:@"Ok"
                    otherButtonTitles:nil];
  [alert show];
  [alert release];
}
- (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.
}
- (void)viewDidUnload {
  [super viewDidUnload];
  // Release any retained subviews of the main view.
  // e.g. self.myOutlet = nil;
}
- (void)dealloc {
  [super dealloc];
}
@end


* This source code was highlighted with Source Code Highlighter.

Ну что ж, начнем. Открыв проект с предыдущей моей статьи добавим в него наш TabBar. Выглядеть это будет так:



Теперь модифицируем наш класс MasterViewController.
В заголовочный файл добавим IBOutlet переменную — указатель на класс контроллер iPhoneTabBar. Это позволит нам при выборе пользователем пункта меню в левой части SplitViewControllera сообщать UITabBarу, что нужно показать соответсвующую страницу+ еще кое что.

MasterViewController.h
#import <UIKit/UIKit.h>
@class DetailViewController;
@class iPhoneTabBar;
@interface MasterViewController : UITableViewController {
  IBOutlet DetailViewController* detailViewController;
  IBOutlet iPhoneTabBar* iphoneTabBar;
}

@end


* This source code was highlighted with Source Code Highlighter.


А теперь самое главное: в реализации класса MasterViewController следует добавить(или заменить, если он был раньше) метод viewDidLoad, который будет вызываться сразу после загрузки view. В нем мы помещаем на нашу detailView содержимое (если точней выражаться то саму view) UITabBarController'a, предварительно спрятав панельку UITabBar, которая внизу
-(void) viewDidLoad{
  [super viewDidLoad];
  iphoneTabBar.view.frame=CGRectMake(0, 0, detailViewController.view.frame.size.width,detailViewController.view.frame.size.height+49);
  iphoneTabBar.tabBar.hidden=TRUE;
  [detailViewController.view insertSubview:iphoneTabBar.view atIndex:1];
}

* This source code was highlighted with Source Code Highlighter.

При выборе пользователем одной из ячеек таблицы(didSelectRowAtIndexPath) мы должны переключится на новую страницу UITabBar'a
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    iphoneTabBar.selectedViewController = [iphoneTabBar.viewControllers objectAtIndex:indexPath.row];
}

* This source code was highlighted with Source Code Highlighter.

Последние штрихи: открыв в InterfaceBuilder'e iPhoneTabBar.xib и AlternativeSplitViewController.xib перетащим(или просто скопируем) с первого во второй UITabBarController. Еще надо связать нашу IBOutlet переменную с этим UITabBarController



Вот и все)
Несколько скриншотов ниже:








Плюсы:минимум времени на портирование + простота реализации.
Минусы: костыль… добавить нечего.
ссылка на исходники здесь и здесь
Мдя, какая то странная вышла статья…
Tags:
Hubs:
Total votes 11: ↑8 and ↓3+5
Comments6

Articles