Доброй ночи/утра/дня/вечера
Как видно из названия статьи я расскажу вам о том, как потратив минимум сил и времени, превратить iPhone`ский UITabBarController в iPad`овский “UISplitViewController”
Для этого нам понадобится: проект(под iPad) с предыдущего моего рассказа, xib файл(под iPhone) с UITabBarController'ом и класс-контроллер к нему. Первое у меня было. Что касается второго и третьего, то я быстро создал xib в Interface Builder'е и дал ему незамысловатое имя iPhoneTabBar.xib.
![](http://hotimg23.fotki.com/a/195_39/211_226/tabbar826.png)
Так как наш UITabBarController создавался лишь для демонстрации, то я…
вообщем нихреначего он не умеет делать. Единственное что я добавил — это UIAlertView, которое выскакивает при нажатии на кнопку Click Me(находится на одной из закладок). Код приведен ниже
iPhoneTabBar.h
iPhoneTabBar.m
Ну что ж, начнем. Открыв проект с предыдущей моей статьи добавим в него наш TabBar. Выглядеть это будет так:
![](http://hotimg23.fotki.com/a/195_39/211_226/pro.png)
Теперь модифицируем наш класс MasterViewController.
В заголовочный файл добавим IBOutlet переменную — указатель на класс контроллер iPhoneTabBar. Это позволит нам при выборе пользователем пункта меню в левой части SplitViewControllera сообщать UITabBarу, что нужно показать соответсвующую страницу+ еще кое что.
MasterViewController.h
А теперь самое главное: в реализации класса MasterViewController следует добавить(или заменить, если он был раньше) метод viewDidLoad, который будет вызываться сразу после загрузки view. В нем мы помещаем на нашу detailView содержимое (если точней выражаться то саму view) UITabBarController'a, предварительно спрятав панельку UITabBar, которая внизу
При выборе пользователем одной из ячеек таблицы(didSelectRowAtIndexPath) мы должны переключится на новую страницу UITabBar'a
Последние штрихи: открыв в InterfaceBuilder'e iPhoneTabBar.xib и AlternativeSplitViewController.xib перетащим(или просто скопируем) с первого во второй UITabBarController. Еще надо связать нашу IBOutlet переменную с этим UITabBarController
![](http://hotimg23.fotki.com/a/195_39/211_226/ib.png)
Вот и все)
Несколько скриншотов ниже:
![](http://hotimg23.fotki.com/a/195_39/211_226/res1781.jpg)
![](http://hotimg23.fotki.com/a/195_39/211_226/res2.jpg)
![](http://hotimg23.fotki.com/a/195_39/211_226/res3.jpg)
![](http://hotimg23.fotki.com/a/195_39/211_226/res4.jpg)
Плюсы:минимум времени на портирование + простота реализации.
Минусы: костыль… добавить нечего.
ссылка на исходники здесь и здесь
Мдя, какая то странная вышла статья…
Как видно из названия статьи я расскажу вам о том, как потратив минимум сил и времени, превратить iPhone`ский UITabBarController в iPad`овский “UISplitViewController”
Для этого нам понадобится: проект(под iPad) с предыдущего моего рассказа, xib файл(под iPhone) с UITabBarController'ом и класс-контроллер к нему. Первое у меня было. Что касается второго и третьего, то я быстро создал xib в Interface Builder'е и дал ему незамысловатое имя iPhoneTabBar.xib.
![](http://hotimg23.fotki.com/a/195_39/211_226/tabbar826.png)
Так как наш UITabBarController создавался лишь для демонстрации, то я…
вообщем ни
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. Выглядеть это будет так:
![](http://hotimg23.fotki.com/a/195_39/211_226/pro.png)
Теперь модифицируем наш класс 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
![](http://hotimg23.fotki.com/a/195_39/211_226/ib.png)
Вот и все)
Несколько скриншотов ниже:
![](http://hotimg23.fotki.com/a/195_39/211_226/res1781.jpg)
![](http://hotimg23.fotki.com/a/195_39/211_226/res2.jpg)
![](http://hotimg23.fotki.com/a/195_39/211_226/res3.jpg)
![](http://hotimg23.fotki.com/a/195_39/211_226/res4.jpg)
Плюсы:минимум времени на портирование + простота реализации.
Минусы: костыль… добавить нечего.
ссылка на исходники здесь и здесь
Мдя, какая то странная вышла статья…