gpt4 book ai didi

iphone - 查看 Controller : How to switch between views programmatically?

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

简而言之:我想要两个全屏 View ,可以在 View A 和 View B 之间切换。我知道我可以只使用选项卡栏 Controller ,但我不想这样做。我想看看这是如何手动完成的,以了解幕后发生的事情。

我有一个充当根 Controller 的 UIViewController:

@interface MyRootController : UIViewController {
IBOutlet UIView *contentView;
}
@property(nonatomic, retain) UIView *contentView;

@end

contentView 连接到一个 UIView,我将其作为 subview 添加到 Nib 的“ View ”中。这是绿色的,我全屏看到它。工作正常。

然后,我以几乎相同的方式创建了另外两个 View Controller 。 View Controller A和 View Controller B。 ViewControllerA 有蓝色背景,ViewControllerB 有黑色背景。只是为了看看哪一个处于事件状态。

因此,在 myRootController 的实现中,我这样做:

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
[super viewDidLoad];

ViewControllerA *vcA = [[ViewControllerA alloc] initWithNib];
[self.contentView addSubview:vcA.view];

[cvA release];
}

顺便说一句,-initWithNib 方法如下所示:

- (id)initWithNib { // Load the view nib
if (self = [super initWithNibName:@"ViewA" bundle:nil]) {
// do ivar initialization here, if needed
}
return self;
}

这有效。当我启动应用程序时,我会看到 ViewControllerA 中的 View 。但现在最大的问题是: View Controller 通常具有所有这些方法,例如:

  • (void)viewWillAppear:(BOOL)动画;
  • (void)viewDidDisappear:(BOOL)动画;
  • (void)viewDidLoad;

...等等。如果我在没有选项卡栏 Controller 的情况下按照“我的”方式进行操作,那么谁或什么,或者如何调用这些方法?我的意思是:如果我分配 ViewController 的类并且 View 可见,我是否需要注意调用这些方法?它如何知道 viewWillAppear、viewDidDisappear 或 viewDidLoad?我相信选项卡栏 Controller 在幕后拥有所有这些“聪明才智”。还是我错了?

更新:我已经测试过了。如果我释放 View Controller (例如:ViewControllerA),我将不会在 viewDidDisappear 上收到任何日志消息。仅当分配和初始化 ViewControllerA 时,我才会得到 viewDidLoad。但仅此而已。所以现在所有的迹象都代表了 UITabBarController 的聪明才智;)我必须弄清楚如何复制它,对吗?

最佳答案

《iPhone 开发入门》第 6 章中有一个切换 View 的好例子。您可以在这里查看它的源代码: http://iphonedevbook.com/

SwitchViewController 具有以编程方式更改 View 的代码。


- (IBAction)switchViews:(id)sender
{

if (self.yellowViewController == nil)
{
YellowViewController *yellowController = [[YellowViewController alloc]
initWithNibName:@"YellowView" bundle:nil];
self.yellowViewController = yellowController;
[yellowController release];
}

[UIView beginAnimations:@"View Flip" context:nil];
[UIView setAnimationDuration:1.25];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];

UIViewController *coming = nil;
UIViewController *going = nil;
UIViewAnimationTransition transition;

if (self.blueViewController.view.superview == nil)
{
coming = blueViewController;
going = yellowViewController;
transition = UIViewAnimationTransitionFlipFromLeft;
}
else
{
coming = yellowViewController;
going = blueViewController;
transition = UIViewAnimationTransitionFlipFromRight;
}

[UIView setAnimationTransition: transition forView:self.view cache:YES];
[coming viewWillAppear:YES];
[going viewWillDisappear:YES];
[going.view removeFromSuperview];
[self.view insertSubview: coming.view atIndex:0];
[going viewDidDisappear:YES];
[coming viewDidAppear:YES];

[UIView commitAnimations];

}

关于iphone - 查看 Controller : How to switch between views programmatically?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/910994/

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