2010-08-19 53 views
1

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

+1

你的意思是MKMapView,没有UIMapView – Felix 2010-12-28 22:18:41

回答

0

你可以使用一个单一的视图控制器,所有的意见(UIMapView,的UITableView等)添加到您的视图,只是显示/隐藏在点击分段控制

这样一个简单的应用程序的正确意见没有太多的意见,你不应该有一个凌乱的/聚集的视图控制器文件,并可以轻松地显示/隐藏这2个视图。

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

2

写,管理您的2 VC的和的MKMapView和UITableView的之间的过渡响应分段控制一个UIViewController。 首先在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的视图属性时创建的。

相关问题