【问题标题】:Switch between 3 or more views在 3 个或更多视图之间切换
【发布时间】:2010-11-10 14:59:49
【问题描述】:

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

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

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

【问题讨论】:

    标签: iphone iphone-sdk-3.0 uiview


    【解决方案1】:

    对于这种特殊情况,人们通常使用UIViewControllerpresentModalViewController:animated: 方法。 UINavigationControllerUIViewController 的子类,所以你的代码看起来像这样:

    UIViewController *addingViewController = [[UIViewController alloc] initWithNibName:@"AddingView" bundle:nil];
    [[self navigationController] presentModalViewController:addingViewController animated:YES];
    [addingViewController release];
    

    【讨论】:

    • 啊,我就是这样做的。我在使用 Xcode 时遇到了一些问题,所以我现在已经解决了。我可以超越 startrt 视图和我自己创建的视图。我以某种神秘的方式认为我必须创建一个 xib 然后传递它(这样我就无法像以前那样了解如何创建一个表)。但你让我走上了正轨。
    【解决方案2】:

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

    【讨论】:

    • 有趣的地方。你能给我举个例子吗?我不是那么喜欢 Obj-C,但我开始喜欢它了。
    【解决方案3】:

    这里是 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]; 
    

    记住在 toggleView 回调中释放旧的 ViewController,如果你没有得到泄漏,因为你失去了对该控制器的所有引用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多