【发布时间】:2014-04-14 22:09:24
【问题描述】:
正如您在标题中看到的,我想在另一个 UIViewController 中显示来自一个 UIViewController 的 UIView。 这样做的原因是,我想在情节提要的额外 UIViewController 中设计 UIView,但在我的 MainViewController 中将它用作应用程序主要运行的覆盖视图。
我尝试了以下方法: 在 MainViewController 中,我创建了第二个 UIViewController 的实例,并将其视图保存在我称为 overlayView 的 UIView 中。
UIViewController* rvc = [self.storyboard instantiateViewControllerWithIdentifier:@"overlayView"];
self.overlayView = rvc.view;
在那一步之后,我以为我只是将它添加为子视图,但遗憾的是它不起作用。
[self.view addSubview:self.overlayView];
有什么遗漏或者我应该尝试一些完全不同的东西吗?
提前致谢:)
编辑:现在的问题是,通过按下 overlayView 的按钮会发生名为 BAD_ACCESS 的错误。
我创建了一个 ViewController,我将其视图 alpha 调节为 0.9。到目前为止,我在这个视图上添加了一个简单的按钮。在我的 MainViewControllers viewDidLoad 方法中,我使用以下代码来初始化“新”ViewControllers 视图:
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中出现以下错误:
线程 1:EXC_BAD_ACCESS(代码=1,地址=0x128a60cd0)
首先我认为问题是由 NSNotificationCenter 引起的。所以我尝试使用委托来调用该方法。但这没有帮助。
委托代码: 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 中,我使用声明的方法来淡出覆盖视图并做一些其他的事情。
你有解决这个问题的想法吗?
提前致谢
【问题讨论】:
-
在什么情况下不起作用?它有什么
frame应该有什么?你还留着rvc吗? -
按钮委托的代码在哪里?
-
什么时候出现错误?
buttonTouchUpInside方法会被调用吗? -
哦,该方法没有被调用...我为它设置了一个断点,但它像往常一样在 main.m 类中中断(与以前的错误相同)。似乎,Xcode 不喜欢这件事,我将 ViewController 的视图显示为覆盖而不推送或呈现......希望有一个解决方案:)
标签: ios objective-c uiview uiviewcontroller