1

我是 iPhone 开发的新手,我真的很喜欢这个。我喜欢它,但有一件事让我很烦。如何不断切换视图?我知道如何从创建新项目时给我的第一个视图到我制作的视图,但是我如何通过这两个窗口?如何从我创建的视图中获取?

我有这个应用程序,它有一个带有 NavigationController 的主窗口,其中包含 UITableViewController。这是我的主菜单。我在右上角有一个“+”按钮,它给了我一个新的视图,但是我如何从这里获得一个新的视图?当用户选择要添加的内容时,如何推送新视图?

希望有人能理解我的问题。一些文档的链接会很好。我到处都看过。

4

3 回答 3

3

你可以做很多不同的方式,你可以按照塞巴斯蒂安所说的去做,你也可以有一个通用的 RootViewController 来管理你的其他视图控制器视图。这就是我喜欢做的事情,我实际上在 RootViewController 上定义了一个协议,例如 ToggleView:UIViewController newController UIViewController:oldController。我让任何我希望能够从该视图切换到另一个视图的 UIViewController 实现此协议。这是因为通常当您单击按钮时,您知道接下来要转到哪个视图。因此,当用户单击按钮时,在拥有该按钮的 UIViewController 中,我创建了新的 ViewController,我希望将其视图推送到屏幕中,这很好,因为它还允许我在视图控制器中设置数据,而不必将其委托给其他对象或使用单例来获取新视图中的数据,然后我调用我的 toggleView 方法和根视图控制器进行切换。我发现这很好用,而且几乎没有涉及任何代码。不过,我并不总是使用这个,如果我知道一个新视图总是来自另一个特定视图(例如,一个查看事件和创建这些事件的主页),在这种情况下,我将松散地耦合视图控制器通过使用协议。

于 2009-07-14T15:13:43.667 回答
1

对于那种特殊情况,人们通常使用的presentModalViewController:animated:方法UIViewControllerUINavigationController是 的子类UIViewController,因此您的代码将如下所示:

UIViewController *addingViewController = [[UIViewController alloc] initWithNibName:@"AddingView" bundle:nil];
[[self navigationController] presentModalViewController:addingViewController animated:YES];
[addingViewController release];
于 2009-07-14T12:11:42.767 回答
1

这是 rootviewcontrollerdelegate 定义

@protocol RootViewControllerViewDelegate

-(void)toggleView:(UIViewController )newController viewController:(UIViewController )oldController;

@结尾

toggleView 的可能实现

-(void)toggleView:(UIViewController *)newController viewController:(UIViewController*)oldController {   
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:1];
[UIView setAnimationTransition:([oldController.view superview] ?  UIViewAnimationTransitionFlipFromLeft : UIViewAnimationTransitionFlipFromLeft) forView:self.view cache:YES];
[newController viewWillAppear:YES];
[oldController viewWillDisappear:YES];
[oldController.view removeFromSuperview];
[self.view addSubview:newController.view];
[oldController viewDidDisappear:YES];
[newController viewDidAppear:YES];
[UIView commitAnimations];
[oldController release];

}

这将通过翻转视图来滑动视图控制器

显然,您必须在某处创建一个新的 RootViewController 并从那里的视图开始,(可能是应用程序委托)

现在,如果您希望 ViewController 能够使用 RootViewController 它必须符合协议,您可以在该类接口中声明它,如下所示

@interface MyViewController : UIViewController <RootViewControllerDelegate> {
id delegate;
}@property(assign) id <RootViewControllerViewDelegate> delegate;

现在您可以使用 delegates 方法将视图交换为另一个视图,因为一切都已正确初始化。交换两个控制器视图的代码可能如下所示

    NewViewController *viewController=...
    //you can set up your viewControllers data here if you need to
   //Since its probable that this view has that data it can just set it instead of
   //delegating 
viewController.delegate=delegate; //setting up the RootViewController reference
[delegate toggleView:viewController viewController:self]; 

remember on the toggleView call back to release the old ViewController, if you dont youll get a leak since you lose all reference to that controller.

于 2009-07-15T03:02:34.567 回答