正如您在标题中所读到的,我想在另一个 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/