1

我正在尝试制作侧边栏菜单,但我有一个小问题。

我解释 :

  1. 我创建了一个名为 sideMenuViewController 的 UIViewController
  2. 在我的 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.
}

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

黑屏侧栏菜单

先感谢您 !

4

2 回答 2

2

两个问题:

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

这是一个工作示例。我在情节提要中创建了左视图控制器,如下所示:

  • 在情节提要上抛出一个 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 中的隐藏 (alt+cmd+4)。

于 2012-10-30T10:05:08.097 回答
0

您所看到的都是黑色的,因为您没有添加侧面菜单视图。尝试这个:

- (void)viewDidLoad {
      [super viewDidLoad];
      _sideMenu = [[SideMenuViewController alloc] init];
      [self.view addSubview:_sideMenu.view];
      [self.view sendSubviewToBack:_sideMenu.view];
}
于 2012-10-30T09:53:41.807 回答