ios - 在另一个 UIViewController 中使用一个 UIViewController 中的 UIView?

标签 ios objective-c uiview uiviewcontroller

正如您在标题中所读到的,我想在另一个 UIViewController 中显示一个 UIViewController 的 UIView。 这样做的原因是,我想在 Storyboard 中的额外 UIViewController 中设计 UIView,但将其用作应用程序主要运行的 MainViewController 中的覆盖 View 。

我尝试了以下方法: 在 MainViewController 中,我创建了第二个 UIViewController 的实例,并将其 View 保存在我称为 overlayView 的 UIView 中。

UIViewController* rvc = [self.storyboard instantiateViewControllerWithIdentifier:@"overlayView"];
self.overlayView = rvc.view;

在那一步之后,我以为我只是将它添加为一个 subview ,但遗憾的是它没有用。

[self.view addSubview:self.overlayView];

有没有遗漏的东西,或者我应该尝试完全不同的东西吗?

提前致谢:)

编辑:现在的问题是,按下 overlayView 的按钮会发生名为 BAD_ACCESS 的错误。

我创建了一个 ViewController,我将其 View alpha 调节为 0.9 的值。到目前为止,我在此 View 上添加了一个简单的按钮。在我的 MainViewControllers viewDidLoad 方法中,我使用以下代码来初始化"new"ViewControllers View :

UIStoryboard* st = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil];
    UIViewController* vc = [st instantiateViewControllerWithIdentifier:@"overlayView"];
    self.overlayView = vc.view;
    [self addChildViewController:vc];
    self.overlayView.alpha = 0.0;

作为下一步,我通过按下 MainViewController 上的按钮“调用”overlayView 并为 alpha 设置动画以实现平滑的淡入:

[self.view addSubview:self.overlayView];

[UIView animateWithDuration:1.3 animations:^{
    self.overlayView.alpha = 0.9;
}];

现在,如果我按下 overlayView 上的按钮,我希望它调用 MainViewController 的方法,该方法正在执行一些操作并让 overlayView 消失。对于这种情况,我使用了 NSNotificationCenter。 但是通过按下这个按钮(在overlayView上),在main.m中出现如下错误:

Thread 1: EXC_BAD_ACCESS (code=1, address=0x128a60cd0)

一开始我以为是NSNotificationCenter引起的问题。所以我尝试使用委托(delegate)来调用该方法。但这没有帮助。

委托(delegate)代码: OverlayViewController.h

@class OverlayViewController;

@protocol OverlayViewControllerDelegate
- (void) setToNormalAction;
@end

@interface OverlayViewController : UIViewController

@property (weak, nonatomic) id <OverlayViewControllerDelegate> delegate;
@property (strong, nonatomic) IBOutlet UIView *overlayView;

- (IBAction)buttonTouchUpInside:(id)sender;

@end

按钮方法:

- (IBAction)buttonTouchUpInside:(id)sender
{
    [self.delegate setToNormalAction];
}

在 MainViewController.h 中,我实现了已知的创建的“OverlayViewControllerDelegate”,在 .m 中,我使用声明的方法淡出 overlayView 并执行一些其他操作。

你有解决这个问题的想法吗?

提前致谢

最佳答案

尝试...

UIViewController* rvc = [self.storyboardinstantiateViewControllerWithIdentifier:@"overlayView"];
self.overlayView = rvc.view;
[self addChildViewController:rvc];
[self.view addSubview:self.overlayView];

关于ios - 在另一个 UIViewController 中使用一个 UIViewController 中的 UIView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23071319/

相关文章:

ios - 向 UITableView 添加新项目而不替换旧项目

iphone - 从 pid 获取优先级和正常运行时间? ( iOS )

objective-c - 在 Objective-C (iOS) 中转码​​视频的最佳方式是什么?

ios - 自定义 View - self.frame 不正确?

ios - 我可以在 iTunes Connect 中提交新的应用程序版本而不取消之前的 "Pending developer release"吗?

ios - 预发布 View 中的新 iTunes 连接构建状态

ios - Xcode 框架 : Umbrella header for module 'Test' does not include header 'NewTest.h'

objective-c - 在 iOS 中使用 NSThread 重新触发 CABasicAnimation

ios - 根据其内容调整 UIScrollView 中 UIView 的大小

ios - UICollisionBehavior的问题