首页 > 代码库 > IOS的滑动菜单(Sliding Menu)的详细写法(附代码)

IOS的滑动菜单(Sliding Menu)的详细写法(附代码)

滑动菜单是一个非常流行的IOS控件

先上效果图:

      



这里使用github的JTReveal框架来开发,链接是https://github.com/agassiyzh/JTRevealSidebarDemo/commit/ac03d9d7be4f1392020627e5fe8c22b972de4704

我们的ViewController要实现protocol JTRevealSidebarV2Delegate的两个optional方法

@optional
- (UIView *)viewForLeftSidebar;
- (UIView *)viewForRightSidebar;


- (UIView *)viewForLeftSidebar {
    CGRect mainFrame = [[UIScreen mainScreen] applicationFrame];
    UITableView *view = self.leftSidebarView;
    if ( ! view) {
        
        view = self.leftSidebarView = [[UITableView alloc] initWithFrame:CGRectMake(0, mainFrame.origin.y, 270, mainFrame.size.height) style:UITableViewStylePlain];
        
        view.dataSource = self;
        view.delegate   = self;
        view.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleHeight;
        view.backgroundColor = [UIColor whiteColor];
        
        UIView* rightHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 250, 42)];
        rightHeaderView.backgroundColor = [UIColor whiteColor];
        rightHeaderView.opaque = NO;
        
        UILabel* lable = [[UILabel alloc] initWithFrame:CGRectMake(90, 2, 100, 38)];
        [lable setText:@"left view"];
        UIFont* font = [UIFont systemFontOfSize:20];
        lable.font = font;
        [rightHeaderView addSubview:lable];
        
        UIView* lines = [[UIView alloc] initWithFrame:CGRectMake(0, 42, 300, 2)];
        lines.backgroundColor = [UIColor lightGrayColor];
        [rightHeaderView addSubview:lines];
        
        UIButton* button = [[UIButton alloc] initWithFrame:CGRectMake(213, 2, 53, 38)];
        [button setTitle:@"Edit" forState:UIControlStateNormal];
        [button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
        [button addTarget:self action:@selector(leftButtonClicked:) forControlEvents:UIControlEventTouchUpInside];
        [rightHeaderView addSubview:button];
        view.tableHeaderView = rightHeaderView;
    }
    
    return view;
}



在ViewController先初始化title

-(void) addTilteBar{
    UIBarButtonItem *back = [[UIBarButtonItem alloc] initWithTitle:@"左边" style:UIBarButtonItemStylePlain target:self action:@selector(showLeftSidebar:)];
    self.navigationItem.leftBarButtonItem = back;
    [back release];
    
    NSArray* array = [[NSArray alloc] initWithObjects:@"Left Tab",@"Right Tab",nil];
    UISegmentedControl* segment = [[UISegmentedControl alloc] initWithItems:array];
    CGRect rect = CGRectMake(80.0f, 8.0f, 170.0f, 30.0f);
    segment.frame = rect;
    segment.segmentedControlStyle = UISegmentedControlStyleBar;
    segment.selectedSegmentIndex = -1;
    [segment addTarget:self action:@selector(segmentAction:) forControlEvents:UIControlEventValueChanged];
    self.navigationItem.titleView = segment;
    [segment release];
    
    
    UIBarButtonItem *mapButton = [[UIBarButtonItem alloc]
                                  initWithTitle:@"右边"
                                  style:UIBarButtonItemStyleBordered
                                  target:self
								  action:@selector(revealRightSidebar:)];
    
//       [button2 addTarget:self action:@selector(revealRightSidebar:) forControlEvents:UIControlEventTouchUpInside];
    self.navigationItem.rightBarButtonItem = mapButton;
    self.navigationItem.revealSidebarDelegate = self;
    
    [mapButton release];

 点击左边的事件是

- (void)showLeftSidebar:(id)sender {
    
    JTRevealedState state = JTRevealedStateLeft;
    if (self.navigationController.revealedState == JTRevealedStateLeft) {
        state = JTRevealedStateNo;
    }
    [self.navigationController setRevealedState:state];
}


界面中这些tableview的Delegate和dataSource共用一个
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    if (tableView == self.rightSidebarView) {
        return [RightArray count];
    }else if(tableView == self.leftSidebarView) {
        return [leftArray count];
    }else{
         return [names count];
    }
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (tableView == self.rightSidebarView) {
        static NSString *CellIdentifier = @"rightcell";
        
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil) {
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
        }
        
        // Configure the cell...
        NSUInteger row = [indexPath row];
       // NSUInteger section = [indexPath section];
       // cell.textLabel.textAlignment = UITextAlignmentCenter;
        cell.textLabel.textAlignment = NSTextAlignmentCenter;
        cell.textLabel.text = [RightArray objectAtIndex:row];
        return cell;
    } else if(tableView == self.leftSidebarView) {
        static NSString *CellIdentifier = @"left_cell";
        
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil) {
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
        }
        
        // Configure the cell...
        NSUInteger row = [indexPath row];
        // NSUInteger section = [indexPath section];
        // cell.textLabel.textAlignment = UITextAlignmentCenter;
        cell.textLabel.textAlignment = NSTextAlignmentCenter;
        cell.textLabel.text = [leftArray objectAtIndex:row];
        return cell;

    }else {
        static NSString *TableSampleIdentifier = @"TableSampleIdentifier";
        
//        UITableViewCell *cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:nil] autorelease];
        UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:TableSampleIdentifier];
        cell.textLabel.text = [names objectAtIndex:indexPath.row];
        
        return cell;
    }
}


代码可以在http://download.csdn.net/detail/baidu_nod/7541417下载