【问题标题】:present a storyboard UIViewController from a UIScrollView subview从 UIScrollView 子视图呈现故事板 UIViewController
【发布时间】:2017-01-06 16:57:49
【问题描述】:

我正在尝试从 UIScrollView 子视图呈现视图控制器。 我试过使用 AppDelegate window.rootViewController presentViewController: 但这给了我“视图不在层次结构中!”错误。 我想避免使用 addSubview ,因为这会破坏 MVC 并且似乎删除了控制器的功能(按钮停止工作)。 当我使用预期的 presentViewController 方法时,我得到“No visible @interface for “InititalScrollViewSubview”声明选择器“presentViewController:animated:completion:”,我认为这意味着我的 initialScrollViewSubview 正在尝试使用 presentViewController,但 presentViewController 必须来自UIViewController。UIScrollView 没有 presentViewController 方法。

我的代码是这样的:

-(void)setupTouchIDButtonTapped: (id)sender {

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"newViewController" bundle:nil];
    NewViewController *myNewViewController = [storyboard instantiateViewControllerWithIdentifier:@"myNewVC"];

//我尝试的第一件事:

AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
[delegate.window.rootViewController presentViewController:NewViewController animated:YES completion:nil];

//我尝试的第二件事

[self addSubview:NewViewController.view];

//我尝试的第三件事:

[self presentViewController:NewViewController animated:YES completion:nil];

}

InitialScrollViewSubview 必须保持原样。理想情况下,我会重构所有内容,因此 InitialScrollViewSubview 是另一个 UIViewController 但我为一家大公司工作,应用程序太大了:) 非常感谢任何建议!

谢谢!!

【问题讨论】:

    标签: ios objective-c iphone xcode


    【解决方案1】:

    如果您尝试在滚动视图中“嵌入”视图控制器的视图,那么您不会显示视图控制器。您实例化它,然后将它的视图添加到视图层次结构中。

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"newViewController" bundle:nil];
        NewViewController *myNewViewController = [storyboard instantiateViewControllerWithIdentifier:@"myNewVC"];
    
    [scrollView addSubview:NewViewController.view];
    

    您还需要设置视图的大小/框架或设置自动布局约束,以便正确调整视图控制器的大小。

    【讨论】:

    • 谢谢!我试过了,使用 [self addSubview:NewViewController.vew];视图出现,但我所有的按钮都停止工作。这是因为它失去了“控制器”功能,因为它现在只是 scrollView 视图的一部分吗?
    • 滚动视图可能是注册接收事件的主要视图,请尝试在 viewcontroller.view 上启用 userInteractionenabled。您也可以在这里尝试提示:stackoverflow.com/questions/4629499/…
    • 这可能是您需要的解决方案stackoverflow.com/questions/16649639/…
    【解决方案2】:

    试试这个

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"newViewController" bundle:nil];

    NewViewController *myNewViewController = [storyboard instantiateViewControllerWithIdentifier:@"myNewVC"];
    

    AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];

    UINavigationController * rootNvc = delegate.window.rootViewController ;

    [rootNvc pushViewController:NewViewController 动画:YES];

    【讨论】:

      猜你喜欢
      • 2014-11-18
      • 2018-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-28
      • 2013-03-24
      • 2012-10-08
      • 1970-01-01
      相关资源
      最近更新 更多