视图控制器的 NSMutableArray

Posted

技术标签:

【中文标题】视图控制器的 NSMutableArray【英文标题】:NSMutableArray of ViewControllers 【发布时间】:2012-05-30 23:59:47 【问题描述】:

我在琢磨如何创建。

然后,一旦我有了那个数组,我怎么能在检测左右 UIgesture 滑动以动画进出视图的方法中使用它...

这是获取我的手势的方法,它只是在两个视图之间制作动画,但是我想在视图控制器数组中的尽可能多的视图之间制作动画。

- (void)swipedScreen:(UISwipeGestureRecognizer*)gesture 
    //Left swipe
    if (gesture.direction == UISwipeGestureRecognizerDirectionLeft) 

        [UIView animateWithDuration:0.25 animations:^
            [self.detailViewB.view setFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
            [self.detailViewA.view setFrame:CGRectMake(-320, 0, self.view.frame.size.width, self.view.frame.size.height)];
    ];

    
    //Right swipe
    else if (gesture.direction == UISwipeGestureRecognizerDirectionRight)

        [UIView animateWithDuration:0.25 animations:^
            [self.detailViewA.view setFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
            [self.detailViewB.view setFrame:CGRectMake(320, 0, self.view.frame.size.width, self.view.frame.size.height)];
        ];

    

作为一个方面,我有一个主视图控制器,我将这些视图控制器加载到子视图中......至少这是计划......我目前正在对视图执行此操作......

http://dl.dropbox.com/u/53813770/SMPrototypeB.zip

更新:

这是一张图表,向你们展示了我想要达到的目标。

这是让它从数组中加载视图的代码。谢天谢地,真是痛苦。

DetailViewController *DVCA = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:[NSBundle mainBundle]];
DetailViewControllerB *DVCB = [[DetailViewControllerB alloc] initWithNibName:@"DetailViewControllerB" bundle:[NSBundle mainBundle]];
DetailViewControllerC *DVCC = [[DetailViewControllerC alloc] initWithNibName:@"DetailViewControllerC" bundle:[NSBundle mainBundle]];

//Create Array of views
viewArray = [NSArray arrayWithObjects:DVCA, DVCB, DVCC, nil];



// set detail View as first view 
UIViewController *recordController = [viewArray objectAtIndex:0];
// This was the bit causing me so many issues.
[self.view addSubview:recordController.view];

【问题讨论】:

如果您的初始视图控制器是导航控制器,那么操作系统会为您提供您要查找的数组,它是 UINavigationController 上的 viewControllers 属性。这是不可变的,但您可以制作它的可变副本。 【参考方案1】:

查看您的项目并看到您的根视图控制器实际上是一个导航控制器,我将重新发布作为答案。

如果您的初始视图控制器是导航控制器,那么操作系统会为您提供您正在寻找的数组,它是 UINavigationController 上的 viewControllers 属性。这是不可变的,但您可以制作它的可变副本。

【讨论】:

我想创建一个新的视图控制器 NSMutableArray 的原因是我在导航控制器的这个级别设置了一个滑动功能。因为在导航堆栈的这个级别我想显示一个一堆数据我不能在一个视图上做,所以我希望用户能够在堆栈的这个级别的 mutableAreray 中的一堆视图之间滑动而不是将更多视图加载到堆栈上。然后一旦他们完成后,他们可以回去做他们想做的任何事情......【参考方案2】:

我在琢磨如何创建视图控制器的 NSMutableArray。

与创建任何其他对象数组的方式相同:

    创建对象。

    将它们放入数组中。

您当然可以在您的应用程序委托或根视图控制器中执行此操作——无论哪个对象负责所有其他视图控制器。我可能会选择让应用程序委托管理视图控制器。然后,您可以将第一响应者设置为滑动手势识别器的目标,并在应用委托(它是响应者链的一部分)中实现在视图控制器之间切换的操作。

【讨论】:

我已经用我想要实现的图表更新了我的问题,我无法在数组中执行此操作的原因是因为我希望 MainViewController 将数组中的视图显示为子视图。 .【参考方案3】:

如何使用开箱即用的 UIScrollView 来获得相同的效果?它支持向多个方向滚动,可以为您节省开发新控件的所有开销,并且您不必担心违反任何 HIG 准则。

【讨论】:

你认为我违反了 HIG 准则吗? 对我来说看起来不错,但我不审查应用程序 :) UIScrollView 非常灵活,我用它来水平滚动视频缩略图而无需进行任何调整。 是的,如果我不需要控制我将要刷入的每个视图,我想我会走这条路,因为我会从 UIWbviews 显示许多不同的数据滚动视图和仅本地界面控件等,并且为每个视图设置视图控制器将有助于保持一切井井有条。但为推荐而欢呼,这可能是我将来会遇到的问题并进行测试,就像我现在正在做的那样视图存储在数组中。 所以你可以让你的应用代理管理加载和切换视图。当应用程序加载时,代理会将默认视图添加为子视图,然后在其顶部放置一个透明视图或层来管理手势。当接收到触摸事件时,该视图将与委托进行通信以交换其下方的视图。这将使您完全分离关注点,因为一切都只会与应用程序委托对话。这就是我将如何构建它......如果我不得不:) 酷,我可能会尝试下一个.. 欢呼聊天,它总是有助于激发人们的想法。

以上是关于视图控制器的 NSMutableArray的主要内容,如果未能解决你的问题,请参考以下文章

添加子视图后显示上一个视图控制器的页面视图控制器

从拆分视图控制器的详细视图中调用主视图控制器

从表视图(子视图)推送新的视图控制器

如何从任何其他视图控制器获取具有视图控制器详细信息的视图层次结构?

在当前视图控制器下显示新的视图控制器

如何从模态视图控制器调用呈现视图控制器的方法