点击按钮导致侧栏上的应用程序崩溃

时间:2015-01-15 08:19:06

标签: ios objective-c segue sidebar

我有两个视图控制器,一个是主视图,一个是侧面菜单视图;所有对象并使用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;

    }];
}

enter image description here

1 个答案:

答案 0 :(得分:2)

在寻求帮助之后,我发现我误解了segue逻辑。 [[[contentVC.view superview] window] addSubview:sideBarVC.view];还不够。

相反,下面的代码应该是正确的:

[contentVC addChildViewController:sideBarVC];
[[[contentVC.view superview] window] addSubview:sideBarVC.view]
[sideBarVC didMoveToParentViewController:contengVC];
相关问题