如何将单个 UIToolbar 与多个不同的 UIViewController 一起使用?

发布于 2024-09-14 22:12:45 字数 291 浏览 4 评论 0原文

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

I have a simple app with two basic screens, a UIMapView and a UITableView. I'd like to have a toolbar at the bottom with a couple of buttons and a UISegmentedControl with two segments: "Map" and "Table". (The layout is similar to the Google Maps app that ships with the iPhone.) How can I keep the same toolbar while presenting either the UIMapView (with a UIMapViewController) or the UITableView (with a UITableViewController) when the user switches back and forth on the segmented control? Of course, I can just create an identical toolbar for each of the two different views and display them separately, but is there a better way?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

成熟稳重的好男人 2024-09-21 22:12:45

编写一个 UIViewController 来管理 2 个 VC 并在 MKMapView 和 UITableView 之间进行转换,以响应分段控件。
首先在 Interface Builder 中为这个新 VC 设置笔尖:添加一个 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 的视图属性时创建的。

Write a UIViewController that manages your 2 VC's and transitions between the MKMapView and UITableView in response to the segmented control.
First set up the nib for this new VC in Interface Builder: add an UISegementedControl and a simple UIView (contentView).
The interface file contains references to the UI Elements and to the 2 VC's + an action to respond to the segmented control:

//
//  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

Implementation:

//
//  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

In the valueChanged method you replace the current view and animate the transition.

Note that the views firstVC.view and secondVC.view are created on first access of the view-property of each VC.

等往事风中吹 2024-09-21 22:12:45

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

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

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

you could use a single view controller, and add all of the views(UIMapView, UITableView, etc) to your view and simply show/hide the correct views upon clicking the segmented control

with such a simple app without many views, you shouldn't have a messy/clustered view controller file and can easily show/hide these 2 views.

perhaps use an animation between switching between views so it looks nice

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文