如何使用具有多个不同UIViewControllers的单个UIToolbar?

时间:2010-08-19 14:47:17

标签: cocoa-touch xcode uiview uiviewcontroller uitoolbar

我有一个简单的应用程序,有两个基本屏幕,一个是UIMapView和一个UITableView。我想在底部有一个带有几个按钮的工具栏和一个带有两个段的UISegmentedControl:“Map”和“Table”。 (布局类似于iPhone附带的Google Maps应用程序。)当用户来回切换时,如何在呈现UIMapView(带有UIMapViewController)或UITableView(带有UITableViewController)的同时保留相同的工具栏分段控制?当然,我可以为两个不同的视图中的每一个创建一个相同的工具栏并单独显示它们,但有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

编写一个UIViewController来管理你的2个VC并在MKMapView和UITableView之间转换以响应分段控件。 首先在Interface Builder中为这个新VC设置nib:添加一个UISegementedControl和一个简单的UIView(contentView)。 接口文件包含对UI元素和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.viewsecondVC.view是在首次访问每个VC的view-property时创建的。

答案 1 :(得分:0)

您可以使用单个视图控制器,并将所有视图(UIMapView,UITableView等)添加到视图中,并在单击分段控件时显示/隐藏正确的视图

如此简单的应用程序没有很多视图,你不应该有一个凌乱/聚集的视图控制器文件,并可以轻松显示/隐藏这两个视图。

也许在视图之间切换时使用动画,所以看起来不错