我有两个视图控制器,一个是主视图,一个是侧面菜单视图;所有对象并使用storyboard创建。
有一个条形按钮' item'在主视图中,单击它时,它将调用自定义segue,从左到右滑出侧边菜单。到目前为止一切都很好。
在侧面菜单上,有一个按钮可以滑回到主视图。但是,我只需单击按钮,应用程序就会终止,Xcode不会超时打印崩溃日志。
我试图在(IBAction)SlideBack:(id)sender
上添加一个断点,好像它没有被调用。所以发生了一系列的事情。
Xcode中断
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
并说 Thread 1: exc_bad_access(code=EXC_i386_GPFLT)
我怀疑自定义segue可能会干扰视图和查看控制器层次结构。但是找不到。
home view implementation:
@implementation HomeViewController
@end
side bar implementation:
@implementation SideBarController
- (IBAction)SlideBack:(id)sender {
NSLog(@"sliding back");
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
The custom slide out segue is:
@implementation CustomSegue
- (void)perform {
UIViewController *contentVC = self.sourceViewController;
UIViewController *sideBarVC = self.destinationViewController;
CGRect sideFrame = sideBarVC.view.frame;
[sideBarVC.view setFrame: CGRectMake(-(contentVC.view.frame.size.width),
0,
contentVC.view.frame.size.width/2,
contentVC.view.frame.size.height)];
CGRect animationFrame = contentVC.view.frame;
sideFrame = sideBarVC.view.frame;
animationFrame.size.width = contentVC.view.frame.size.width / 2;
sideBarVC.view.alpha = 0;
[[[contentVC.view superview] window] addSubview:sideBarVC.view];
[UIView animateWithDuration:1
delay:0.0
options:UIViewAnimationOptionCurveEaseOut
animations:^{
sideBarVC.view.frame = animationFrame;
sideBarVC.view.alpha = 1;
}
completion:^(BOOL finished) {
sideBarVC.view.alpha = 1;
sideBarVC.view.frame = animationFrame;
}];
}
答案 0 :(得分:2)
在寻求帮助之后,我发现我误解了segue逻辑。
[[[contentVC.view superview] window] addSubview:sideBarVC.view];
还不够。
相反,下面的代码应该是正确的:
[contentVC addChildViewController:sideBarVC];
[[[contentVC.view superview] window] addSubview:sideBarVC.view]
[sideBarVC didMoveToParentViewController:contengVC];