您的位置:首页 > 移动开发 > IOS开发

iOS中侧边栏的添加

2013-10-17 13:26 260 查看
原文地址:iOS中侧边栏的添加作者:伤心的小果冻1.添加系统框架




2.添加三方类库




3.创建一个MenuViewController作为侧边滑动时候显示的视图

//
MenuViewController.h

//
sideTableView

//

// Created by Dong
on 13-9-26.

// Copyright (c)
2013年
dong. All rights reserved.

//

#import
<UIKit/UIKit.h>

@interface MenuViewController :
UIViewController<UITableViewDataSource,UITableViewDelegate>

@end

//
//
MenuViewController.m
// sideTableView
//
// Created by Dong on
13-9-26.
// Copyright (c)
2013年
dong. All rights reserved.
//

#import
"MenuViewController.h"
#import
"UIApplication+util.h"
@interface
MenuViewController ()
@property
(nonatomic,retain) UITableView *tableView;
@property
(nonatomic,retain) NSArray *datasource;
@end

@implementation MenuViewController

-(NSInteger)numberOfSectionsInTableView:(UITableView
*)tableView
{
return
1;
}

-(NSInteger)tableView:(UITableView *)tableView
numberOfRowsInSection:(NSInteger)section
{

return self.datasource.count;
}

-(UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static
NSString *reuseID =
@"reuseId";

UITableViewCell *cell =
[tableView dequeueReusableCellWithIdentifier:reuseID];

if (!cell)
{

cell =
[[UITableViewCell
alloc]
initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:reuseID];

}

cell.textLabel.text = [self.datasource objectAtIndex:indexPath.row];
return
cell;
}

-(void)tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

[tableView
deselectRowAtIndexPath:indexPath animated:YES];

NSString
*rootViewControllerName = NSStringFromClass([[[UIApplication sharedApplication] sideViewController].rootViewController class]);

if
([[self.datasource objectAtIndex:indexPath.row] isEqualToString:rootViewControllerName])
{

[[[UIApplication
sharedApplication] sideViewController] popViewControllerAnimated:YES];

NSLog(@"直接弹出");

return;

}

UIViewController *vc = [[NSClassFromString([self.datasource objectAtIndex:indexPath.row])
alloc] init];

[[[UIApplication sharedApplication] sideViewController]
popViewControllerWithNewCenterController:vc animated:YES];
}

#pragma mark -
#pragma mark init methods

-(NSArray
*)datasource
{

if
(!_datasource) {

_datasource = [[NSArray alloc]
initWithObjects:@"MainViewController",

@"HUDViewController",

@"ActivityBarViewController",

@"AudioViewController",

nil];

}

return _datasource;
}

-(UITableView *)tableView
{
if
(!_tableView) {

_tableView = [[UITableView alloc] initWithFrame:self.view.frame
style:UITableViewStyleGrouped];

_tableView.dataSource = self;

_tableView.delegate = self;

}

return _tableView;
}

-(void)buildLayout
{

[self.view addSubview:self.tableView];
}

#pragma mark -
#pragma mark NESMenuViewController
lifecycle

-
(id)initWithNibName:(NSString
*)nibNameOrNil bundle:(NSBundle
*)nibBundleOrNil
{
self =
[super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self)
{

//
Custom initialization

}

return self;
}

-
(void)viewDidLoad
{

[super viewDidLoad];

[self
buildLayout];
// Do any additional setup after loading the
view.
}

-
(void)didReceiveMemoryWarning
{

[super didReceiveMemoryWarning];

// Dispose of any resources that can be
recreated.
}

@end

4.创建一个baseViewController作为所有侧边栏点击时候出现视图的父类

//
BaseViewController.h

//
sideTableView

//

// Created by Dong
on 13-9-26.

// Copyright (c)
2013年
dong. All rights reserved.

//

#import
<UIKit/UIKit.h>

@interface BaseViewController :
UIViewController

@end

//
//
BaseViewController.m
// sideTableView
//
// Created by Dong on
13-9-26.
// Copyright (c)
2013年
dong. All rights reserved.
//
#import
"UIApplication+util.h"
#import
"BaseViewController.h"
#import
"MenuViewController.h"
@interface
BaseViewController ()

@end

@implementation BaseViewController

-(void)showSideViewHandler:(id)sender
{

MenuViewController *menu = [[MenuViewController alloc]
init];

[[[UIApplication sharedApplication] sideViewController] pushViewController:menu onDirection:PPRevealSideDirectionLeft
animated:YES];
}
- (id)initWithNibName:(NSString *)nibNameOrNil
bundle:(NSBundle
*)nibBundleOrNil
{
self =
[super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self)
{

//
Custom initialization

}

return self;
}

- (void)viewDidLoad
{

[super viewDidLoad];

UISwipeGestureRecognizer *gesture = [[UISwipeGestureRecognizer
alloc] init];
[gesture
addTarget:self action:@selector(showSideViewHandler:)];

gesture.direction =
UISwipeGestureRecognizerDirectionRight;

[self.view
addGestureRecognizer:gesture];

self.view.backgroundColor = [UIColor whiteColor];
// Do any additional setup after loading the
view.
}

- (void)didReceiveMemoryWarning
{

[super didReceiveMemoryWarning];

// Dispose of any resources that can be
recreated.
}

@end

5.创建四个子视图继承baseViewController用于点击左边的侧边栏时候显示的视图(此处视图名称和database初始化的时候一致!!!)
(1)MainViewController

//
MainViewController.h

// sideTableView

//

// Created by Dong on 13-9-26.

// Copyright (c) 2013年
dong. All rights reserved.

//

#import
"BaseViewController.h"

@interface MainViewController : BaseViewController

@end

//
//
MainViewController.m
//
sideTableView
//
//
Created by Dong on 13-9-26.
//
Copyright (c) 2013年
dong. All rights reserved.
//
#import "UIApplication+util.h"
#import "MainViewController.h"
#import "MenuViewController.h"
@interface MainViewController ()

@end

@implementation MainViewController
-(void)btnClicked:(id)sender
{

MenuViewController *menu =
[[MenuViewController alloc]
init];

[[[UIApplication
sharedApplication] sideViewController] pushViewController:menu onDirection:PPRevealSideDirectionLeft
animated:YES];
}

#pragma mark -
#pragma mark init
methods

-(void)buildLayout
{

self.view.backgroundColor = [UIColor whiteColor];

UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];

btn.frame = CGRectMake(10, 30,
300, 30);
[btn
setTitle:@"显示侧边栏"
forState:UIControlStateNormal];
[btn
addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:btn];

UILabel *lab = [[UILabel alloc] initWithFrame:CGRectMake(10, 70,
300, 30)];

lab.text = @"在屏幕上右划也可打开侧边栏";

lab.textAlignment
=
NSTextAlignmentCenter;

[self.view addSubview:lab];

}
- (id)initWithNibName:(NSString *)nibNameOrNil
bundle:(NSBundle
*)nibBundleOrNil
{
self
= [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if
(self) {

// Custom
initialization
}

return self;
}

- (void)viewDidLoad
{

[super
viewDidLoad];

[self
buildLayout];
// Do any additional
setup after loading the view.
}

- (void)didReceiveMemoryWarning
{

[super
didReceiveMemoryWarning];
//
Dispose of any resources that can be recreated.
}

@end

(2)HUDViewController(用于显示系统转圈圈那个东西)

#import "BaseViewController.h"

@interface HUDViewController : BaseViewController

@end

//
//
HUDViewController.m
//
sideTableView
//
//
Created by Dong on 13-9-26.
//
Copyright (c) 2013年
dong. All rights reserved.
//

#import "HUDViewController.h"
#import "SVProgressHUD.h"
@interface HUDViewController ()

@end

@implementation HUDViewController

- (id)initWithNibName:(NSString *)nibNameOrNil
bundle:(NSBundle
*)nibBundleOrNil
{
self
= [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if
(self) {

// Custom
initialization
}

return self;
}

-(void)btnClicked:(UIButton *)btn
{

switch (btn.tag) {

case 10:

[SVProgressHUD show];

break;

case 20:

[SVProgressHUD showWithStatus:@"操作信息"];

break;

case 30:

[SVProgressHUD showWithStatus:@"加了蒙板就可以重新启动项目了,这种操作需要使用代理方法关闭,刷新,下载什么的操作需要锁定用户界面操作时经常用"
maskType:SVProgressHUDMaskTypeBlack];

break;

case 40:

[SVProgressHUD
showWithMaskType:SVProgressHUDMaskTypeGradient];

break;

case 50:

[SVProgressHUD dismiss];

break;

case 60:

[SVProgressHUD
dismissWithSuccess:@"操作成功"];

break;

case 70:

[SVProgressHUD dismissWithSuccess:@"操作成功,延迟3秒关闭"
afterDelay:3];

break;

default:

[SVProgressHUD dismissWithError:@"操作失败"];

break;
}
}

- (void)viewDidLoad
{

[super
viewDidLoad];

UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];

btn.frame = CGRectMake(10, 30,
300, 30);
[btn
setTitle:@"显示HUD"
forState:UIControlStateNormal];

btn.tag = 10;
[btn
addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:btn];

btn =
[UIButton
buttonWithType:UIButtonTypeRoundedRect];

btn.frame = CGRectMake(10, 70,
300, 30);
[btn
setTitle:@"显示HUD带信息"
forState:UIControlStateNormal];

btn.tag = 20;
[btn
addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:btn];

btn =
[UIButton
buttonWithType:UIButtonTypeRoundedRect];

btn.frame = CGRectMake(10, 110, 300, 30);
[btn
setTitle:@"显示HUD带信息蒙板"
forState:UIControlStateNormal];

btn.tag = 30;
[btn
addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:btn];

btn =
[UIButton
buttonWithType:UIButtonTypeRoundedRect];

btn.frame = CGRectMake(10, 150, 300, 30);
[btn
setTitle:@"显示HUD蒙板"
forState:UIControlStateNormal];

btn.tag = 40;
[btn
addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:btn];

btn =
[UIButton
buttonWithType:UIButtonTypeRoundedRect];

btn.frame = CGRectMake(10, 300, 300, 30);
[btn
setTitle:@"关闭HUD"
forState:UIControlStateNormal];

btn.tag = 50;
[btn
addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:btn];

btn =
[UIButton
buttonWithType:UIButtonTypeRoundedRect];

btn.frame = CGRectMake(10, 340, 300, 30);
[btn
setTitle:@"关闭HUD带信息"
forState:UIControlStateNormal];

btn.tag = 60;
[btn
addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:btn];

btn =
[UIButton
buttonWithType:UIButtonTypeRoundedRect];

btn.frame = CGRectMake(10, 380, 300, 30);
[btn
setTitle:@"关闭HUD带信息,延迟"
forState:UIControlStateNormal];

btn.tag = 70;
[btn
addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:btn];

btn =
[UIButton
buttonWithType:UIButtonTypeRoundedRect];

btn.frame = CGRectMake(10, 420, 300, 30);
[btn
setTitle:@"关闭HUD带失败信息"
forState:UIControlStateNormal];

btn.tag = 80;
[btn
addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:btn];
// Do any additional
setup after loading the view.
}

- (void)didReceiveMemoryWarning
{

[super
didReceiveMemoryWarning];
//
Dispose of any resources that can be recreated.
}

@end

(3)ActivityBarViewController(用于显示系统转圈圈那个东西)

//
ActivityBarViewController.h

// sideTableView

//

// Created by Dong on 13-9-26.

// Copyright (c) 2013年
dong. All rights reserved.

//

#import
"BaseViewController.h"

@interface ActivityBarViewController : BaseViewController

@end

//
//
ActivityBarViewController.m
//
sideTableView
//
//
Created by Dong on 13-9-26.
//
Copyright (c) 2013年
dong. All rights reserved.
//

#import "ActivityBarViewController.h"
#import "ZAActivityBar.h"
@interface ActivityBarViewController
()

@end

@implementation
ActivityBarViewController

-
(id)initWithNibName:(NSString
*)nibNameOrNil bundle:(NSBundle
*)nibBundleOrNil
{

self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];

if (self) {

// Custom
initialization

}

return self;
}
#define
ZBAR_ACTION_1 @"action1"
#define
ZBAR_ACTION_2 @"action2"

-(void)btnClicked:(UIButton *)btn
{

switch (btn.tag) {

case 10:

//第一个是参数,第二个是key,zbar本身支持多线程,可以同时存在多个消息,action用来标记某一个消息,作用相当于tag

[ZAActivityBar showWithStatus:ZBAR_ACTION_1
forAction:ZBAR_ACTION_1];

break;

case 20:

[ZAActivityBar showWithStatus:ZBAR_ACTION_2
forAction:ZBAR_ACTION_2];

break;

case 30:

[ZAActivityBar showSuccessWithStatus:ZBAR_ACTION_1@" success" forAction:ZBAR_ACTION_1];

break;

case 40:

[ZAActivityBar
showErrorWithStatus:ZBAR_ACTION_1@"
fail" forAction:ZBAR_ACTION_1];

break;

case 50:

[ZAActivityBar
showSuccessWithStatus:ZBAR_ACTION_2@" success" forAction:ZBAR_ACTION_2];

break;

case 60:

[ZAActivityBar
showErrorWithStatus:ZBAR_ACTION_2@"
fail" forAction:ZBAR_ACTION_2];

break;

case 70:

[ZAActivityBar dismissForAction:ZBAR_ACTION_1];

break;

default:

[ZAActivityBar dismiss];

break;

}
}

-
(void)viewDidLoad
{

[super
viewDidLoad];

UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];

btn.frame = CGRectMake(10, 30,
300, 30);
[btn
setTitle:@"显示Zbar1"
forState:UIControlStateNormal];

btn.tag = 10;
[btn
addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:btn];

btn =
[UIButton
buttonWithType:UIButtonTypeRoundedRect];

btn.frame = CGRectMake(10, 70,
300, 30);
[btn
setTitle:@"显示Zbar2"
forState:UIControlStateNormal];

btn.tag = 20;
[btn
addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:btn];

btn =
[UIButton
buttonWithType:UIButtonTypeRoundedRect];

btn.frame = CGRectMake(10, 110, 300, 30);
[btn
setTitle:@"Zbar1成功"
forState:UIControlStateNormal];

btn.tag = 30;
[btn
addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:btn];

btn =
[UIButton
buttonWithType:UIButtonTypeRoundedRect];

btn.frame = CGRectMake(10, 150, 300, 30);
[btn
setTitle:@"Zbar1失败"
forState:UIControlStateNormal];

btn.tag = 40;
[btn
addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:btn];

btn =
[UIButton
buttonWithType:UIButtonTypeRoundedRect];

btn.frame = CGRectMake(10, 190, 300, 30);
[btn
setTitle:@"Zbar2成功"
forState:UIControlStateNormal];

btn.tag = 50;
[btn
addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:btn];

btn =
[UIButton
buttonWithType:UIButtonTypeRoundedRect];

btn.frame = CGRectMake(10, 230, 300, 30);
[btn
setTitle:@"Zbar2失败"
forState:UIControlStateNormal];

btn.tag = 60;
[btn
addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:btn];

btn =
[UIButton
buttonWithType:UIButtonTypeRoundedRect];

btn.frame = CGRectMake(10, 270, 300, 30);
[btn
setTitle:@"取消Zbar1"
forState:UIControlStateNormal];

btn.tag = 70;
[btn
addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:btn];

btn =
[UIButton
buttonWithType:UIButtonTypeRoundedRect];

btn.frame = CGRectMake(10, 310, 300, 30);
[btn
setTitle:@"全部取消"
forState:UIControlStateNormal];

btn.tag = 80;
[btn
addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:btn];

// Do any additional
setup after loading the view.
}

-
(void)didReceiveMemoryWarning
{

[super
didReceiveMemoryWarning];
//
Dispose of any resources that can be recreated.
}

@end

(4)ActivityBarViewController(音频播放)

// AudioViewController.h

// sideTableView

//

// Created by Dong on 13-9-26.

// Copyright (c) 2013年
dong. All rights reserved.

//

#import
"BaseViewController.h"

#import
<AVFoundation/AVFoundation.h>

@interface AudioViewController
: BaseViewController<AVAudioPlayerDelegate>

@end

//

// AudioViewController.m

// sideTableView

//

// Created by Dong on 13-9-26.

// Copyright (c) 2013年
dong. All rights reserved.

//

#import
"AudioViewController.h"

@interface AudioViewController
()

@property (nonatomic,retain)
AVAudioPlayer *player;

@property (nonatomic,retain)
NSTimer *timer;

@property (nonatomic,retain)
UILabel *timeLab;

@property (nonatomic,retain)
UISlider *slider;

@property (nonatomic,assign)
BOOL isPlaying;

@end

@implementation
AudioViewController

-
(id)initWithNibName:(NSString *)nibNameOrNil
bundle:(NSBundle
*)nibBundleOrNil
{

self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];

if (self) {

// Custom
initialization

}

return self;
}

-(void)btnClicked:(UIButton *)sender
{

if (self.isPlaying) {

[self.timer invalidate];

[sender
setTitle:@"播放"
forState:UIControlStateNormal];

[self.player pause];

self.isPlaying = NO;

self.slider.enabled = NO;

}

else

{

self.timer
= [NSTimer
scheduledTimerWithTimeInterval:1
target:self selector:@selector(playCount:) userInfo:nil
repeats:YES];

[sender
setTitle:@"暂停"
forState:UIControlStateNormal];

[self.player play];

self.isPlaying = YES;

self.slider.enabled = YES;

}
}

-(void)playCount:(NSTimer *)timer
{

NSUInteger currentTime = self.player.currentTime;

NSUInteger totalTime = self.player.duration;

self.slider.value = currentTime / (CGFloat)totalTime;

// 1min = 60sec

// totalTime单位是秒

// 60*60 = 3600

//
NSUInteger h = totalTime/3600;

NSUInteger m = totalTime%(60*60)/60;

NSUInteger s = totalTime%(60*60)%60%60;

NSUInteger cm = currentTime%(60*60)/60;

NSUInteger cs = currentTime%(60*60)%60%60;

self.timeLab.text = [NSString stringWithFormat:@"%lu:%lu/%lu:%lu",cm,cs,m,s];

}

-(void)audioPlayerDidFinishPlaying:(AVAudioPlayer
*)player successfully:(BOOL)flag
{

NSLog(@"播放完成");

self.isPlaying = NO;

self.slider.value = 0;

self.slider.enabled = NO;

UIButton *btn = (UIButton *)[self.view viewWithTag:10];

[btn setTitle:@"播放"
forState:UIControlStateNormal];

[self.timer
invalidate];
}

-(void)initAudioPlayer
{

NSString *music = [[NSBundle mainBundle] pathForResource:@"HelpMe" ofType:@"mp3"];

NSURL *url = [NSURL fileURLWithPath:music];

NSError *error;

self.player
= [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];

if (error) {

NSLog(@"播放器加载失败:%@",[error
localizedDescription]);

return;

}

[self.player
prepareToPlay];

//所有的代理方法都是可选的

self.player.delegate = self;
}

-(void)changeCurrentTime:(UISlider *)sender
{

NSUInteger total = self.player.duration;

self.player.currentTime = total * sender.value;
}

-
(void)viewDidLoad
{

[super
viewDidLoad];

[self
initAudioPlayer];

UIButton *btn
= [UIButton
buttonWithType:UIButtonTypeRoundedRect];

btn.frame = CGRectMake(10, 30,
300, 30);

btn.tag = 10;

[btn setTitle:@"播放"
forState:UIControlStateNormal];

[btn addTarget:self
action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:btn];

self.slider
= [[UISlider alloc] initWithFrame:CGRectMake(10,
70, 300,
0)];

[self.slider
addTarget:self action:@selector(changeCurrentTime:)
forControlEvents:UIControlEventValueChanged];

self.slider.enabled = NO;

[self.view addSubview:self.slider];

self.timeLab =
[[UILabel
alloc]
initWithFrame:CGRectMake(10,
110, 300,
30)];

self.timeLab.backgroundColor = [UIColor clearColor];

self.timeLab.textAlignment = NSTextAlignmentCenter;

[self.view addSubview:self.timeLab];

[self playCount:nil];

// Do any additional setup after loading the view.
}

-
(void)didReceiveMemoryWarning
{

[super
didReceiveMemoryWarning];

// Dispose of any resources that can be
recreated.
}

@end

呼。。。若干好多代码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: