如何在目标 c 中使用 XIB 在登录视图后创建滑出菜单
Posted
技术标签:
【中文标题】如何在目标 c 中使用 XIB 在登录视图后创建滑出菜单【英文标题】:How to create a Slide Out Menu after login view using XIB in objective c 【发布时间】:2016-11-23 11:10:35 【问题描述】:我是 ios 新手,在创建滑出菜单时遇到问题。
我搜索并找到了该示例,但所有示例都用于情节提要,并且我在 xib
中找到的示例在 AppDelegate
类中调用。
我需要在xib
中创建一个滑出菜单,登录后应该调用它。
提前致谢!
【问题讨论】:
试试这个教程raywenderlich.com/32054/… 将故事板中的滑出菜单控制器设置为 rootview 并在用户未登录时显示 loginview 控制器 @Vinodh 任何其他易于实现的示例。 github.com/Friend-LGA/LGSideMenuController 并且有很多尝试谷歌“side menu ios objective c” @Muju 你有解决办法吗? 【参考方案1】:侧边栏菜单的最佳示例是SWRevealViewController。该库易于使用且易于理解。
【讨论】:
确实是最好的,但它在 Storyboard 中,而不是在登录后。 不,先生,您也可以在登录后实现侧边栏。假设你有三个控制器,但你想从第二个控制器开始,所以你可以很容易地做到这一点。首先从一个控制器推送到第二个控制器,然后将 sw 连接到第二个控制器,这样您就可以在第二个视图控制器中获取 sw。【参考方案2】:这对我很有效...试试你的代码。 _parentView 是您的自定义滑出视图,_rightView (UIButton) 用于关闭这些自定义滑出视图。你只需初始化这两个属性
@property (strong,nonatomic) UIView *parentView;
@property (strong,nonatomic) UIButton *rightView;
-(void)slideView
if(![_parentView isDescendantOfView:app.navController.view])
[self showMenu];
else
[self hideMenu];
-(void)showMenu
int width=[[UIScreen mainScreen]bounds].size.width;
int height=[[UIScreen mainScreen]bounds].size.height;
_parentView =[[UIView alloc]initWithFrame:CGRectMake(0-(width-70), 0, width-70, self.navigationController.view.frame.size.height)];
[_parentView setBackgroundColor:[UIColor lightTextColor]];
[app.navController.view addSubview:_parentView];
_rightView=[[UIButton alloc]initWithFrame:CGRectMake(0,80, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height-80)];
_rightView.alpha=0.7;
[_rightView addTarget:self action:@selector(hideMenu) forControlEvents:UIControlEventTouchUpInside];
if(_parentView.frame.origin.x <0)
[self performSelector:@selector(showSideMenu) withObject:nil afterDelay:0.2];
-(void)showSideMenu
if(_parentView.frame.origin.x <0)
[UIView animateWithDuration:0.5 animations:^
[UIView animateWithDuration:0.7 animations:^
[self.view addSubview:_rightView];
_rightView.backgroundColor=[UIColor blackColor];
];
CGRect frame = _parentView.frame;
frame.origin.x =0;
_parentView.frame = frame;
CGRect rightFrame=self.view.frame;
rightFrame.origin.x=_parentView.frame.size.width;
self.view.frame=rightFrame;
CGRect fram1=app.navController.navigationBar.frame;
fram1 .origin.x =_parentView.frame.size.width;
app.navController.navigationBar.frame =fram1 ;
completion:^(BOOL finished)
];
-(void)hideMenu
if(_parentView.frame.origin.x == 0)
[UIView animateWithDuration:0.3 animations:^
CGRect frame = _parentView.frame;
frame.origin.x=-_parentView.frame.size.width;
_parentView.frame = frame;
CGRect fram=self.view.frame;
fram .origin.x=0;
self.view.frame =fram ;
CGRect fram1=app.navController.navigationBar.frame;
fram1 .origin.x =0;
app.navController.navigationBar.frame =fram1 ;
completion:^(BOOL finished)
[_rightView removeFromSuperview];
[_parentView removeFromSuperview];
];
谢谢...!!!
【讨论】:
如何添加表格视图,因为您的父视图是透明的。【参考方案3】:从普通视图控制器推送到 SW 视图控制器
UIStoryboard*Storyboard=[AppDelegate storyBoardType];
SidebarViewController *sidebarmemu =(SidebarViewController*)[Storyboard instantiateViewControllerWithIdentifier:@"SidebarController"];
tbTBC*tabbarController=(tbTBC*)[Storyboard instantiateViewControllerWithIdentifier:@"tbTBCId"];
SWRevealViewController *revealController;
UINavigationController *frontNavigationController;
UINavigationController *rearNavigationController;
frontNavigationController =[[UINavigationController alloc]initWithRootViewController:tabbarController];
rearNavigationController =[[UINavigationController alloc]initWithRootViewController:sidebarmemu];
revealController = [[SWRevealViewController alloc] initWithRearViewController:rearNavigationController frontViewController:frontNavigationController];
revealController.delegate = self;
self.swcontroller =revealController;
self.view.window.rootViewController =self.swcontroller;
借助此代码,您可以获得标签栏和侧栏
【讨论】:
@DishantRajpat 我不希望使用 Storyboard。以上是关于如何在目标 c 中使用 XIB 在登录视图后创建滑出菜单的主要内容,如果未能解决你的问题,请参考以下文章
使用通过 ViewController 从 XIB 加载的子视图中的对象时出错
如何通过同一个 ViewController(在故事板上创建)在两个视图(在 xib 上创建)之间切换?
如何初始化添加到目标 c 中的 .xib 的 UITableView?