嵌套在 UIScrollview 中的 ViewController 中的 presentModalViewController?

Posted

技术标签:

【中文标题】嵌套在 UIScrollview 中的 ViewController 中的 presentModalViewController?【英文标题】:presentModalViewController from a ViewController nested in a UIScrollview? 【发布时间】:2012-01-27 07:58:47 【问题描述】:

我正在创建一个 iPhone 应用程序,并且在从嵌套在 Scrollview 中的 viewController 中运行 presentModalViewController 的代码时遇到问题,当我单击按钮以呈现下一个视图控制器时,我得到一个缓慢的动画和两个空白屏幕秒。

从我的 AppDelegate 我将 rootViewController 设置为我的 ViewController(其中包含设置我的滚动视图布局的代码)

我基本上是在滚动视图中加载两个视图控制器,以便用户可以下拉屏幕以查看历史记录。

AppDelegateCode

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

[application setStatusBarStyle:UIStatusBarStyleBlackOpaque];  

self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
ViewController *controller =  [[[ViewController alloc] initWithNibName:@"ViewController" bundle:nil] autorelease];
self.window.rootViewController = controller; //self.viewController;
[self.window makeKeyAndVisible];
return YES;

ViewController 代码

- (void)viewWillAppear:(BOOL)animated

[超级viewWillAppear:动画];

CGRect bounds = self.view.bounds;

vScroller.bounces = NO;
vScroller.pagingEnabled = YES;
vScroller.showsVerticalScrollIndicator = FALSE;
vScroller.alwaysBounceVertical = FALSE;

vScroller.contentSize = CGSizeMake(bounds.size.width, bounds.size.height * 2);

// History View Controller..
historyViewController *historyView = [[historyViewController alloc] initWithNibName:@"historyViewController" bundle:nil];

[vScroller addSubview:historyView.view];
[historyView release];

// Reconfigure Content Offset
vScroller.contentOffset = CGPointMake(0, bounds.size.height);

// Calculator View Controller
mainCalculatorViewController *mainView = [[mainCalculatorViewController alloc] initWithNibName:@"mainCalculatorViewController" bundle:nil];
mainView.view.frame = CGRectOffset(bounds, 0, bounds.size.height);
[vScroller addSubview:mainView.view];

ma​​inCalculatorViewController 信息按钮代码

  - (IBAction)btnInfo:(id)sender 
    
        infoViewController *controller = [[infoViewController alloc] initWithNibName:@"infoViewController" bundle:nil];

        controller.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
        [self presentModalViewController:controller animated:YES];
        [controller release];
    

问题是,当单击信息按钮时,我得到了糟糕的动画,在我看来,按钮和 presentModal 视图控制器可能应该从包含嵌套滚动视图的父视图控制器运行,但我不确定如何执行此操作.

任何提示或建议都会很棒。

谢谢亚伦

【问题讨论】:

【参考方案1】:

首先我不知道界面生成器是如何做到这一点的。但是以编程方式,您可能应该创建一个新的 navigationController 来处理 modalVC。

-(void)showModalVC

    self.myModalVC = [[ModalVC alloc] init];

    self.myModalVC.dismissDelegate = self;

    UINavigationController *navController = [[UINavigationController alloc]
                                             initWithRootViewController:self.myModalVC];

    navController.modalPresentationStyle = UIModalPresentationFormSheet; //or something similar, this one is used on an iPad

    UILabel *navTopItemTitle = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 300, 44)];
    navTopItemTitle.text = @"Modal shizzle";
    navTopItemTitle.backgroundColor = [UIColor clearColor];
    navTopItemTitle.textColor = [UIColor whiteColor];
    navTopItemTitle.textAlignment = UITextAlignmentCenter;

    [navController.navigationBar.topItem setTitleView:navTopItemTitle];

    [self presentModalViewController:navController animated:YES];

    [self.addTabViewController release];
    [navController release];

这就是我使用 ModalVC 的方式。

希望对你有用。

祝你好运。

【讨论】:

感谢代码,我已经尝试过了,但是单击信息按钮时仍然出现黑屏,这似乎与视图控制器有关,并且它的按钮嵌套在滚动视图中这是在另一个视图控制器上:/ 嗯,黑屏是您在 modalVC 中执行的操作。那里的信息可以而且应该在 modalVC 和 presentModalVC 的分配之间的属性中设置。或者在modalVC本身的loadView中。出现黑屏不再是 presentModalVC 问题,而主要是设置 ModalVC 视图时的错误。 嗯我不确定它是什么,您的代码在显示信息视图控制器方面工作完美,但是从初始视图中,当我单击信息按钮时,屏幕变黑 2 秒然后显示信息视图也不会播放过渡动画。 这似乎是一个不同的问题。我建议更新问题并添加有关如何显示 modalVC 或一起提出新问题的代码。但是,您似乎是在加载 modalVC 和 viewDidAppear:-method 之后设置数据,这意味着您在视图已经在屏幕中的那一刻加载数据。 感谢您的帮助,我已经更新了问题并发布了来自 AppDelegate、ViewController 和 mainCalculatorViewController 的代码,这是我的按钮所在的位置。

以上是关于嵌套在 UIScrollview 中的 ViewController 中的 presentModalViewController?的主要内容,如果未能解决你的问题,请参考以下文章

缩放嵌套在 UIScrollView 中的子视图

获取嵌套在 UIScrollView 中的 UIImageView 中两个 CGPoints 之间的距离

UIScrollView 中的嵌套 UIStackView 子项不会拉伸以填充

UIScrollView 内的嵌套 UIStackViews:不填充容器的宽度?

多层UIScrollView 嵌套滚动

如何在具有自动布局的操作上自动增加 UIScrollView 中的内容大小?