iOS开发教程之仿网易抽屉效果

2020-01-12 13:51:09于海丽

LeftTableViewController.m


//
//  LeftTableViewController.m
//  19_抽屉效果_仿网易
//
//  Created by beyond on 14-8-1.
//  Copyright (c) 2014年 com.beyond. All rights reserved.
//

#import "LeftTableViewController.h"
#import "Column.h"
#import "LeftTableViewControllerDelegate.h"
@interface LeftTableViewController ()
{
    // 栏目数组,保存的是左边栏目列表中的所有栏目对象
    NSArray *_arr;
}

@end

@implementation LeftTableViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    // 新闻 栏目
    Column *newsColumn = [Column columnNamed:@"新闻" imgName:@"news.png" className:@"NewsViewController"];
    // 图片 栏目
    Column *picColumn = [Column columnNamed:@"图片" imgName:@"pic.png" className:@"PicViewController"];
    // 图片 栏目
    Column *commentColumn = [Column columnNamed:@"跟帖" imgName:@"comment.png" className:@"CommentViewController"];
    // 以后要添加栏目,只要改这里就可以了
    
    
    // 将栏目对象,一次性全添加到不可变数组中
    _arr = @[newsColumn,picColumn,commentColumn];
    
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return _arr.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellID = @"leftVC";
    // 下面这个dequeue只能用于storyboard或xib中
    // UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID forIndexPath:indexPath];
    // 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID];
    
    if (cell == nil) {
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID];
    }
    
    // 设置独一无二的数据
    Column *column = _arr[indexPath.row];
    cell.textLabel.text = column.columnName;
    cell.imageView.image = [UIImage imageNamed:column.columnImgName];
    return cell;
}

// 点击一行时,主控制中的主视图必须展示相应栏目的内容,因此,必须实例化对应点击的行的栏目控制器,并用添加到导航控制器,调用代理 的方法传递数据给代理 使用,此处的代理 其实就是 主控制器
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // 先取消默认的点击 高亮的颜色
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
    // 取出对应行的数据模型(栏目)
    Column *column = _arr[indexPath.row];
    
    if ([self.delegate respondsToSelector:@selector(leftTableViewRowClicked:)]) {
        
        // 传递数据给主控制器 BeyondViewController,通过代理
        // 关键代码~
        [self.delegate leftTableViewRowClicked:column];
    }
    
    
}
@end