SideMenu 黑色视图
Posted
技术标签:
【中文标题】SideMenu 黑色视图【英文标题】:SideMenu black view 【发布时间】:2012-10-30 09:29:32 【问题描述】:我正在尝试制作侧边栏菜单,但我遇到了一点问题。
我解释一下:
-
我创建了一个 UIViewController,我称之为 sideMenuViewController
在我的 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.
问题是当我点击菜单按钮时,我得到一个黑屏,而不是我的侧边菜单视图。
提前谢谢你!
【问题讨论】:
【参考方案1】:两个问题:
-
您根本没有添加 sideMenu。尝试将其添加到父视图 (
self.view.superview
),在您的情况下很可能是 UIWindow:[self.view.superview insertSubview:_sideMenu.view belowSubview:self.view];如果您正在使用导航控制器,请使用
self.navigationController.view
而不是 self.view
。
不确定您是使用 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];
【讨论】:
以上是关于SideMenu 黑色视图的主要内容,如果未能解决你的问题,请参考以下文章