Как я могу использовать один UIToolbar с несколькими различными UIViewControllers? - PullRequest
1 голос
/ 19 августа 2010

У меня есть простое приложение с двумя основными экранами, UIMapView и UITableView. Я хотел бы иметь панель инструментов внизу с парой кнопок и UISegmentedControl с двумя сегментами: «Карта» и «Таблица». (Макет похож на приложение Google Maps, которое поставляется с iPhone.) Как сохранить ту же панель инструментов при представлении UIMapView (с UIMapViewController) или UITableView (с UITableViewController), когда пользователь переключается назад и вперед Сегментированный контроль? Конечно, я могу просто создать одинаковую панель инструментов для каждого из двух разных видов и отобразить их отдельно, но есть ли лучший способ?

Ответы [ 2 ]

2 голосов
/ 29 декабря 2010

Напишите UIViewController, который управляет вашими 2 VC и переходами между MKMapView и UITableView в ответ на сегментированный элемент управления.Сначала настройте перо для этого нового VC в Интерфейсном Разработчике: добавьте UISegementedControl и простой UIView (contentView).Файл интерфейса содержит ссылки на элементы пользовательского интерфейса и 2 VC + действие для ответа на сегментированный элемент управления:

//
//  MapAndTableViewController.h
//  

#import <UIKit/UIKit.h>

#import "MyMapViewController.h"
#import "MyTableViewController.h"

@interface MapAndTableViewController : UIViewController {

    IBOutlet UISegmentedControl* segmentedControl;  
    IBOutlet UIView* contentView;
    UIViewController* firstVC;
    UIViewController* secondVC;
}


-(IBAction) valueChanged:(UISegmentedControl*) sender;

@end

Реализация:

//
//  MapAndTableViewController.m
//

#import "MapAndTableViewController.h"


@implementation MapAndTableViewController

-(IBAction) valueChanged:(UISegmentedControl*) sender {

    if (sender.selectedSegmentIndex == 0) {
        [UIView transitionFromView:[contentView.subviews lastObject] toView:firstVC.view duration:0.5 options:UIViewAnimationOptionTransitionFlipFromLeft  completion:nil];
    }
    if (sender.selectedSegmentIndex == 1) {
        [UIView transitionFromView:[contentView.subviews lastObject] toView:secondVC.view duration:0.5 options:UIViewAnimationOptionTransitionFlipFromLeft  completion:nil];
    }

}

-(void)awakeFromNib {
    firstVC = [[MyMapViewController alloc] initWithNibName:@"MyMapViewController" bundle:nil];
    secondVC = [[MyTableViewController alloc] initWithNibName:@"MyTableViewController" bundle:nil]; 

}

- (void)viewDidLoad {
    [super viewDidLoad];
    [contentView addSubview:firstVC.view];      
}

- (void)dealloc {
    [firstVC release];
    [secondVC release];
    [super dealloc];
}    

@end

В методе valueChangedвы заменяете текущее представление и анимируете переход.

Обратите внимание, что представления firstVC.view и secondVC.view создаются при первом доступе к свойству view каждого VC.

0 голосов
/ 27 декабря 2010

Вы можете использовать один контроллер представления и добавить все представления (UIMapView, UITableView и т. Д.) В ваше представление и просто показать / скрыть правильные представления после нажатия на сегментированный элемент управления

с таким простымприложение без большого количества представлений, у вас не должно быть грязного / кластерного файла контроллера представления, и вы можете легко показать / скрыть эти 2 представления.

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

...