我正在尝试制作侧边栏菜单,但我遇到了一些问题。
我解释说:
在我的viewController类(初始视图控制器)中,在头文件中,我导入了我的类SideMenuViewController,我写道:
- (IBAction为)openSideMenu:(ID)发送者;
@property(nonatomic, retain) SideMenuViewController *sideMenu;
openSideMenu操作与菜单按钮相关联。
我实现了这样的方法:
- (IBAction)openSideMenu:(id)sender {
CGRect destination = self.view.frame;
if(destination.origin.x > 0){
destination.origin.x = 0;
}else{
destination.origin.x += SideMenuX;
}
[UIView animateWithDuration:0.4 animations:^{
self.view.frame = destination;
}completion:^(BOOL finished) {
if(finished){
}
}];
}
SideMenuX是一个宏:#define SideMenuX 154.4
我的viewDidLoad方法如下所示:
- (void)viewDidLoad
{
[super viewDidLoad];
_sideMenu = [[SideMenuViewController alloc] init];
[self.view sendSubviewToBack:_sideMenu.view];
// Do any additional setup after loading the view, typically from a nib.
}
问题是,当我点击菜单按钮时,我会看到黑屏,而不是我的侧面菜单视图。
提前谢谢!
答案 0 :(得分:2)
两个问题:
self.view.superview
),在您的情况下很可能是UIWindow:[self.view.superview insertSubview:_sideMenu.view belowSubview:self.view];如果您使用的是导航控制器,请使用
self.navigationController.view
代替self.view
}。 这是working example。我在故事板中创建了左视图控制器,如下所示:
SideMenuViewController
SideMenuViewController
使用
在viewDidLoad中实例化控制器UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
self.sideMenu = (SideMenuViewController*)[storyboard instantiateViewControllerWithIdentifier:@"SideMenuViewController"];
然后将其作为超级视图的子项插入。
(回答以下评论)
这一行是问题所在:
[self.view.superview addSubview:_sideMenu.view];
在基于NIB的项目中,superview是UIWindow,但在Storyboard项目中,UIViewController的self.view.superview为nil。您可以解决此问题,例如,添加UINavigationViewController。请按照以下步骤操作:
然后将代码更改为
_sideMenu = [[SideMenuViewController alloc] initWithNibName:@"SideMenuViewController" bundle:nil];
[self.navigationController.view.superview insertSubview:_sideMenu.view belowSubview:self.navigationController.view];
要隐藏UINavigationController的导航栏,请在Storyboard中选择它,然后在Attributes Inspector中单击Hidden(alt + cmd + 4)。
答案 1 :(得分:0)
您所看到的只是黑色,因为您没有添加侧边菜单视图。试试这个:
- (void)viewDidLoad {
[super viewDidLoad];
_sideMenu = [[SideMenuViewController alloc] init];
[self.view addSubview:_sideMenu.view];
[self.view sendSubviewToBack:_sideMenu.view];
}