SideMenu黑色视图

时间:2012-10-30 09:29:32

标签: objective-c ios sidebar

我正在尝试制作侧边栏菜单,但我遇到了一些问题。

我解释说:

  1. 我创建了一个名为sideMenuViewController
  2. 的UIViewController
  3. 在我的viewController类(初始视图控制器)中,在头文件中,我导入了我的类SideMenuViewController,我写道:

    - (IBAction为)openSideMenu:(ID)发送者;

    @property(nonatomic, retain) SideMenuViewController *sideMenu;
    
  4. openSideMenu操作与菜单按钮相关联。Menu button

    我实现了这样的方法:

    - (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.
    }
    

    问题是,当我点击菜单按钮时,我会看到黑屏,而不是我的侧面菜单视图。

    Black screen side Bar Menu

    提前谢谢!

2 个答案:

答案 0 :(得分:2)

两个问题:

  1. 你根本没有添加sideMenu。尝试将其添加到父视图(self.view.superview),在您的情况下很可能是UIWindow:
     [self.view.superview insertSubview:_sideMenu.view belowSubview:self.view];
    如果您使用的是导航控制器,请使用self.navigationController.view代替self.view }。
  2. 不确定您是使用NIB还是故事板初始化视图(如果没有,请参阅下文)。

  3. 这是working example。我在故事板中创建了左视图控制器,如下所示:

    • 在故事板上抛出View Controller组件。
    • 选择左栏中的控制器,然后转到右栏中的Identity Inspector(alt + cmd + 3):
      • 将班级设为SideMenuViewController
      • 将故事板ID设置为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。请按照以下步骤操作:

    • 投入“导航控制器”
    • 删除它指向的视图控制器。
    • 按住Ctrl并将指针从UINavigationController拖动到视图控制器,然后在出现的对话框中选择“根视图控制器”。
    • 将指向视图控制器的箭头拖到UINavigationController(标记初始视图控制器的那个,而不是来自UINavigationController的那个)。

    然后将代码更改为

    _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];
}