【问题标题】:SideMenu black viewSideMenu 黑色视图
【发布时间】:2012-10-30 09:29:32
【问题描述】:

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

我解释一下:

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

    -(IBAction)openSideMenu:(id)sender;

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

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

提前谢谢你!

【问题讨论】:

    标签: objective-c ios sidebar


    【解决方案1】:

    两个问题:

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

    这是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 中的隐藏 (alt+cmd+4)。

    【讨论】:

    • 感谢您的回答。我添加了这一行:[self.view.superview insertSubview:_sideMenu.view belowSubview:self.view]; 但它不起作用:/
    • 呃,也许 SideMenuViewController 缺少 NIB?使用 File > New File > User Interface > Empty 创建一个,将其命名为 SideMenuViewController,选择新的 SideMenuViewController.xib,单击 File 的所有者,转到 Identity Inspector (alt+cmd 3) 并将类设置为 SideMenuViewController。或者您可以在我上面发布的故事板中创建一个定义。或者,您可以在github中创建一个示例项目并发布地址。
    • 谢谢!我使用了你提供的 github 项目来实现我自己的类,它可以工作!
    • 我在 Github 上添加了项目,我想知道为什么应用程序显示黑页。这是链接:github.com/ali59a/SideMenuTest
    【解决方案2】:

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

    - (void)viewDidLoad {
          [super viewDidLoad];
          _sideMenu = [[SideMenuViewController alloc] init];
          [self.view addSubview:_sideMenu.view];
          [self.view sendSubviewToBack:_sideMenu.view];
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-11
      • 1970-01-01
      相关资源
      最近更新 更多