首页 > 技术精文 > iOS > 一个简单的自定义TabView例子
2015
09-08

一个简单的自定义TabView例子

这是以Android的开发角度实现的,虽然是Android的角度却也是编程思想。也就是说所有的语言理论上都是这样实现!

实现流程:

1.创建一个数据模型,在接触OC的过程中,发现OC的程序员好喜欢用字典,在Android中对应的是哈希表。然后进行几个字典的嵌套使用。(可能是我接触的OC程序员不多)这种实现方式极大的造成了代码的可读性和健壮性,并且非常难以维护。我们之所以要创建类这个东西,就应该把它用的淋漓尽致。干嘛要自己去维护每一个变量,每个集合?不嫌累么?特别是3层,4层的嵌套,人都要晕了……扯远了!

2.创建数据源

3.显示数据源到tableview上面。

看代码:ViewController.h

//
//  ViewController.h
//  Leehom
//
//  Created by leehom on 15/9/1.
//  Copyright (c) 2015年 leehom. All rights reserved.
//

#import <UIKit/UIKit.h>

#define STATUS_HEIGHT        20

// Screen
#define SCREEN_WIDTH [UIScreen mainScreen].bounds.size.width
#define SCREEN_HEIGHT [UIScreen mainScreen].bounds.size.height
#define SCREEN_BOUNDS [UIScreen mainScreen].bounds
#define SCREEN_SIZE [UIScreen mainScreen].bounds.size

@interface CustomItem : NSObject

@property (strong,nonatomic) NSString *lText;
@property (strong,nonatomic) NSString *bText;

@end

@interface ViewController : UIViewController<UITableViewDataSource,UITableViewDelegate>

@property (strong,nonatomic) UITableView *tabView;
@property (strong,nonatomic) UINib *nib;
@property (strong,nonatomic) NSMutableArray *array;

@end

 

ViewController.m

//
//  ViewController.m
//  Leehom
//
//  Created by leehom on 15/9/1.
//  Copyright (c) 2015年 leehom. All rights reserved.
//

#import "ViewController.h"
#import "MyTableViewCell.h"

@interface ViewController ()

@end

@implementation CustomItem


@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    [self.view setBackgroundColor:[UIColor whiteColor]];
    
    _tabView = [[UITableView alloc]initWithFrame: CGRectMake(0, STATUS_HEIGHT, SCREEN_WIDTH, SCREEN_HEIGHT-STATUS_HEIGHT) style:UITableViewStylePlain];
    [_tabView setDataSource:self];
    [_tabView setDelegate:self];
    
    _array = [[NSMutableArray alloc]init];
    for (int i=0; i<30; ++i) {
        CustomItem *item = &#91;&#91;CustomItem alloc&#93;init&#93;;
        &#91;item setLText:&#91;&#91;NSString alloc&#93; initWithFormat:@"Label:%d",i&#93;&#93;;
        &#91;item setBText:&#91;&#91;NSString alloc&#93; initWithFormat:@"Button:%d",i&#93;&#93;;
        &#91;_array setObject:item atIndexedSubscript:i&#93;;
    }
    
    &#91;self.view addSubview:_tabView&#93;;
}

- (void)didReceiveMemoryWarning {
    &#91;super didReceiveMemoryWarning&#93;;
    // Dispose of any resources that can be recreated.
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *identifier = @"mycell";
    if(_nib == nil){
        //在使用复用机制之前要先确保registerNib这个方法
        _nib = &#91;UINib nibWithNibName:@"MyTableViewCell" bundle:nil&#93;;
        &#91;_tabView registerNib:_nib forCellReuseIdentifier:identifier&#93;;
    }
    MyTableViewCell *cell = &#91;tableView dequeueReusableCellWithIdentifier:identifier&#93;;
    CustomItem* item = &#91;_array objectAtIndex:indexPath.row&#93;;
    &#91;cell.customLabel setText:&#91;item lText&#93;&#93;;
    &#91;cell.customButton setTitle:&#91;item bText&#93; forState:UIControlStateNormal&#93;;
    return cell;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return &#91;_array count&#93;;
}

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

@end
&#91;/objc&#93;

&nbsp;

然后创建一个新文件,一个Cocoa Touch Class,然后输入名字,把Also Create Xib File勾上。SubClass填UITableViewCell。然后点中新创建的XIB文件,随便拖两个玩意儿上面。如图:<img class="alignnone size-full wp-image-5634" src="http://www.ithtw.com/wp-content/uploads/2015/09/828E41_20150908171812.jpg" alt="828E41B5-7D06-4C63-B2D9-9B23A098F3A8" width="383" height="152" />

然后点住控件,按住Command键+鼠标左键不放,拖到<span class="s1">MyTableViewCell</span>.h文件,然后编译器自动添加以下代码

@property (strong, nonatomic) IBOutlet UILabel *customLabel;
@property (strong, nonatomic) IBOutlet UIButton *customButton;

好吧,运行程序效果图:

60C6E919-1916-43A2-8C2D-63A3C28EF928

最后编辑:
作者:leehom
leehom
本博客主要是把自己的经验记录于此,方便自己以后查阅及其他遇到类似问题的朋友参考。如果你有觉得不错的文章,可以注册会员发布文章或者邮箱发给我文章地址,谢谢!
捐 赠如果觉得文章还不错,请麻烦点下广告,算是赞助下本站服务器费用,谢谢!

留下一个回复