gpt4 book ai didi

iphone - 用于在导航 Controller 中交换 ViewController 的分段控制

转载 作者:行者123 更新时间:2023-12-03 21:10:43 25 4
gpt4 key购买 nike

这是我的 iPhone 应用程序的设置:

我有一个 UITabBarController,它有 4 个 View Controller (1 个 UINavigationController 和 3 个 UIViewController)。

Onload 我的应用程序默认为 UINavigationController,其中有一个分组的 UITableView,它提供两个导航选项,当用户点击第一个选项时,相关的 UITableViewController (包含位置列表)被推送到堆栈上。

我希望在屏幕上发生的是有一个 UISegmentedControl 有两个选项,一个“ ListView ”(当 UIViewController 被推送时用户默认看到)和一个“ map View ”,它将允许相关要在 map 上表示的位置。

我使用以下代码在导航栏上创建 UISegmentedControl:

UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] initWithItems:segmentItems];
[segmentedControl setSelectedSegmentIndex:0];
[segmentedControl setAutoresizingMask:UIViewAutoresizingFlexibleWidth];
[segmentedControl setSegmentedControlStyle:UISegmentedControlStyleBar];
[segmentedControl addTarget:self action:@selector(segmentAction:) forControlEvents:UIControlEventValueChanged];

[[self navigationItem] setTitleView:segmentedControl];
[segmentedControl release];

这是 UISegmented 控件在更改时将调用的方法:

- (void) segmentAction:(id)sender
{
UISegmentedControl *segmentControl = sender;

if([segmentControl selectedSegmentIndex] == 0)
{
NSLog(@"LIST VIEW CHOSEN!");
}
else
{
NSLog(@"MAP VIEW CHOSEN!");
}
}

所以基本上我的问题是实现我想要实现的目标的正确/最佳方法是什么,我不想将 Controller 推到导航堆栈上,我只想将其切换到位(可能使用动画)。所有接口(interface)均内置于 IB 中。

我尝试做到这一点的一种方法,有效但感觉不正确,是在我的 nib 文件中创建两个单独的 UIView(一个用于 ListView ,一个用于 map View ),然后适本地使用 setView: ..但后来我想这些 View 中的每一个不应该有自己的 Controller 和/或自己的 Nib 吗?

- (void) segmentAction:(id)sender
{
UISegmentedControl *segmentControl = sender;

if([segmentControl selectedSegmentIndex] == 0)
{
NSLog(@"LIST VIEW CHOSEN!");
[self setView:listView]; //Declared as an UIView IBOutlet
}
else
{
NSLog(@"MAP VIEW CHOSEN!");
[self setView:mapView]; //Declared as an UIView IBOutlet
}
}

我遇到的一些半相关示例使用“removeFromSuperview”和“addSubview”,这让我有些困惑,我对 Cocoa Touch 开发相对较新,所以任何帮助我解决这个问题的帮助将不胜感激。

谢谢

最佳答案

有几种方法可以处理这个问题,如果您只是在 TableView(已经在 UINavigationController 堆栈上)和与此特定 UITableView 一起使用的 map View 之间切换,您可以让分段控件以模态方式显示 map View Controller ,这就是 presentModalViewController:。这在功能上确实有一些缺点,但如果 map View 相对简单,它可能就是您所寻找的。

实现此目的的另一种方法(可能也是最可靠的方法)是使用一个 View Controller 来处理 TableView 和 map View 。如果他们确实具有相同的数据源,那么这是理想的选择。

另一种方法是使用两个 View Controller , TableView 和 map View 各一个,并在 segmentAction 方法中的导航 Controller 堆栈上进行逐字插入和弹出操作。例如:

- (void) segmentAction:(id)sender
{
UISegmentedControl *segmentControl = sender;

if([segmentControl selectedSegmentIndex] == 0)
{
NSLog(@"LIST VIEW CHOSEN!");
[self.navigationController popViewControllerAnimated:YES];
[self.navigationController pushViewController:listViewController animated:YES];
}
else
{
NSLog(@"MAP VIEW CHOSEN!");
[self.navigationController popViewControllerAnimated:YES];
[self.navigationController pushViewController:mapViewController animated:YES];
}
}

我会确保阅读人机界面指南,以及 View Controller 和导航 Controller 如何工作的文档。

关于iphone - 用于在导航 Controller 中交换 ViewController 的分段控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3450303/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com