iOS開發UI篇—UITableview控件基本使用數組
1、一個簡單的英雄展現程序性能
NJHero.h文件代碼(字典轉模型)atom
1 #import <Foundation/Foundation.h> 2 3 @interface NJHero : NSObject 4 /** 5 * 頭像 6 */ 7 @property (nonatomic, copy) NSString *icon; 8 /** 9 * 名稱 10 */ 11 @property (nonatomic, copy) NSString *name; 12 /** 13 * 描述 14 */ 15 @property (nonatomic, copy) NSString *intro; 16 17 - (instancetype)initWithDict:(NSDictionary *)dict; 18 + (instancetype)heroWithDict:(NSDictionary *)dict; 19 @end
NJViewController.m文件代碼spa
1 #import "NJViewController.h" 2 #import "NJHero.h" 3 4 @interface NJViewController ()<UITableViewDataSource, UITableViewDelegate> 5 /** 6 * 保存全部的英雄數據 7 */ 8 @property (nonatomic, strong) NSArray *heros; 9 @property (weak, nonatomic) IBOutlet UITableView *tableView; 10 11 @end 12 13 @implementation NJViewController 14 15 #pragma mark - 懶加載 16 - (NSArray *)heros 17 { 18 if (_heros == nil) { 19 // 1.得到全路徑 20 NSString *fullPath = [[NSBundle mainBundle] pathForResource:@"heros" ofType:@"plist"]; 21 // 2.更具全路徑加載數據 22 NSArray *dictArray = [NSArray arrayWithContentsOfFile:fullPath]; 23 // 3.字典轉模型 24 NSMutableArray *models = [NSMutableArray arrayWithCapacity:dictArray.count]; 25 for (NSDictionary *dict in dictArray) { 26 NJHero *hero = [NJHero heroWithDict:dict]; 27 [models addObject:hero]; 28 } 29 // 4.賦值數據 30 _heros = [models copy]; 31 } 32 // 4.返回數據 33 return _heros; 34 } 35 36 - (void)viewDidLoad 37 { 38 [super viewDidLoad]; 39 // 設置Cell的高度 40 // 當每一行的cell高度一致的時候使用屬性設置cell的高度 41 self.tableView.rowHeight = 60; 42 self.tableView.delegate = self; 43 } 44 45 #pragma mark - UITableViewDataSource 46 // 返回多少組 47 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 48 { 49 return 1; 50 } 51 // 返回每一組有多少行 52 - (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 53 { 54 return self.heros.count; 55 } 56 // 返回哪一組的哪一行顯示什麼內容 57 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 58 { 59 // 1.建立CELL 60 UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:nil]; 61 // 2.設置數據 62 // 2.1取出對應行的模型 63 NJHero *hero = self.heros[indexPath.row]; 64 // 2.2賦值對應的數據 65 cell.textLabel.text = hero.name; 66 cell.detailTextLabel.text = hero.intro; 67 cell.imageView.image = [UIImage imageNamed:hero.icon]; 68 // 3.返回cell 69 return cell; 70 } 71 #pragma mark - UITableViewDelegate 72 /* 73 // 當每一行的cell的高度不一致的時候就使用代理方法設置cell的高度 74 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 75 { 76 if (1 == indexPath.row) { 77 return 180; 78 } 79 return 44; 80 } 81 */ 82 83 #pragma mark - 控制狀態欄是否顯示 84 /** 85 * 返回YES表明隱藏狀態欄, NO相反 86 */ 87 - (BOOL)prefersStatusBarHidden 88 { 89 return YES; 90 } 91 @end
實現效果:代理
代碼注意點:指針
(1)在字典轉模型的代碼處用下面的代碼,爲可變數組分配dictArray.count個存儲空間,能夠提升程序的性能code
NSMutableArray *models = [NSMutableArrayarrayWithCapacity:dictArray.count];orm
(2)設置cell的高度對象
有三種辦法能夠設置cell的高度blog
1) 能夠在初始加載方法中設置,self.tableView.rowHeight = 60;這適用於當每一行的cell高度一致的時候,使用屬性設置cell的高度。
2)在storyboard中設置,適用於高度一致
3)當每一行的cell的高度不一致的時候就使用代理方法設置cell的高度
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (1 == indexPath.row) {
return 180;
}
return 44;
}
2、cell的一些屬性
代碼示例:
1 #import "NJViewController.h" 2 #import "NJHero.h" 3 4 @interface NJViewController ()<UITableViewDataSource, UITableViewDelegate> 5 /** 6 * 保存全部的英雄數據 7 */ 8 @property (nonatomic, strong) NSArray *heros; 9 @property (weak, nonatomic) IBOutlet UITableView *tableView; 10 11 @end 12 13 @implementation NJViewController 14 15 #pragma mark - 懶加載 16 - (NSArray *)heros 17 { 18 if (_heros == nil) { 19 // 1.得到全路徑 20 NSString *fullPath = [[NSBundle mainBundle] pathForResource:@"heros" ofType:@"plist"]; 21 // 2.更具全路徑加載數據 22 NSArray *dictArray = [NSArray arrayWithContentsOfFile:fullPath]; 23 // 3.字典轉模型 24 NSMutableArray *models = [NSMutableArray arrayWithCapacity:dictArray.count]; 25 for (NSDictionary *dict in dictArray) { 26 NJHero *hero = [NJHero heroWithDict:dict]; 27 [models addObject:hero]; 28 } 29 // 4.賦值數據 30 _heros = [models copy]; 31 } 32 // 4.返回數據 33 return _heros; 34 } 35 36 - (void)viewDidLoad 37 { 38 [super viewDidLoad]; 39 // 設置Cell的高度 40 // 當每一行的cell高度一致的時候使用屬性設置cell的高度 41 self.tableView.rowHeight = 60; 42 self.tableView.delegate = self; 43 44 } 45 46 #pragma mark - UITableViewDataSource 47 // 返回多少組 48 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 49 { 50 return 1; 51 } 52 // 返回每一組有多少行 53 - (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 54 { 55 return self.heros.count; 56 } 57 // 返回哪一組的哪一行顯示什麼內容 58 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 59 { 60 // 1.建立CELL 61 UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:nil]; 62 // 2.設置數據 63 // 2.1取出對應行的模型 64 NJHero *hero = self.heros[indexPath.row]; 65 // 2.2賦值對應的數據 66 cell.textLabel.text = hero.name; 67 cell.detailTextLabel.text = hero.intro; 68 cell.imageView.image = [UIImage imageNamed:hero.icon]; 69 70 // 2.3設置cell的輔助視圖 71 // cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 72 if (0 == indexPath.row) { 73 cell.accessoryView = [UIButton buttonWithType:UIButtonTypeContactAdd]; 74 }else 75 { 76 cell.accessoryView = [[UISwitch alloc] init]; 77 } 78 // UIButton *btn = [[UIButton alloc] init]; 79 // btn.backgroundColor = [UIColor redColor]; 80 // cell.accessoryView = btn; 81 82 83 // 2.4設置cell的背景顏色 84 cell.backgroundColor = [UIColor blueColor]; 85 86 // 設置默認狀態的背景 87 // UIView *view = [[UIView alloc] init]; 88 // view.backgroundColor = [UIColor blueColor]; 89 // cell.backgroundView = view; 90 91 UIImageView *iv = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"buttondelete"]]; 92 cell.backgroundView = iv; 93 94 // 設置選中狀態的背景 95 UIView *view2 = [[UIView alloc] init]; 96 view2.backgroundColor = [UIColor purpleColor]; 97 cell.selectedBackgroundView = view2; 98 // 3.返回cell 99 return cell; 100 } 101 102 103 #pragma mark - 控制狀態欄是否顯示 104 /** 105 * 返回YES表明隱藏狀態欄, NO相反 106 */ 107 - (BOOL)prefersStatusBarHidden 108 { 109 return YES; 110 } 111 @end
實現效果:
cell的一些屬性:
(1)設置cell的輔助視圖,設置cell.accessoryView(系統提供了枚舉型,也能夠自定義@父類指針指向子類對象);
(2)設置cell的背景顏色,有兩種方式能夠設置cell的背景顏色:
經過backgroundColor 和 backgroundView均可以設置cell的背景。可是backgroundView 的優先級比 backgroundColor的高,因此若是同時設置了backgroundColor和backgroundView, 那麼backgroundView會蓋住backgroundColor
示例:cell.backgroundColor = [UIColorblueColor];
(3)設置cell默認狀態的背景
示例1:
UIView *view = [[UIView alloc] init];
view.backgroundColor = [UIColor blueColor];
cell.backgroundView = view;
示例2:
UIImageView *iv = [[UIImageViewalloc] initWithImage:[UIImageimageNamed:@"buttondelete"]];
cell.backgroundView = iv;(父類指針指向子類對象,可使用圖片用簡單的操做設置絢麗的效果)
(4)設置cell選中狀態的背景
示例:
UIView *view2 = [[UIView alloc] init];
view2.backgroundColor = [UIColorpurpleColor];
cell.selectedBackgroundView = view2;
3、tableview的一些屬性
代碼示例:
1 #import "NJViewController.h" 2 3 @interface NJViewController ()<UITableViewDataSource> 4 5 @end 6 7 @implementation NJViewController 8 9 - (void)viewDidLoad 10 { 11 [super viewDidLoad]; 12 13 // 1.建立tableview 14 UITableView *tableview = [[UITableView alloc] init]; 15 tableview.frame = self.view.bounds; 16 17 // 2.設置數據源 18 tableview.dataSource =self; 19 20 // 3.添加tableview到view 21 [self.view addSubview:tableview]; 22 23 // 4.設置分割線樣式 24 // tableview.separatorStyle = UITableViewCellSeparatorStyleNone; 25 26 // 5.設置分割線顏色 27 接收的參數是顏色的比例值 28 tableview.separatorColor = [UIColor colorWithRed:0/255.0 green:255/255.0 blue:0/255.0 alpha:255/255.0]; 29 30 // 設置tableview的頭部視圖 31 tableview.tableHeaderView = [UIButton buttonWithType:UIButtonTypeContactAdd]; 32 tableview.tableFooterView = [[UISwitch alloc] init]; 33 } 34 35 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 36 { 37 return 1; 38 } 39 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 40 { 41 return 10; 42 } 43 44 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 45 { 46 // 1.建立cell 47 UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil]; 48 49 // 2.設置cell的數據 50 cell.textLabel.text = [NSString stringWithFormat:@"%d", indexPath.row ]; 51 52 // 3.返回cell 53 return cell; 54 } 55 56 - (BOOL)prefersStatusBarHidden 57 { 58 return YES; 59 } 60 @end
實現效果:
tableview的一些屬性:
(1)設置分割樣式(tableview.separatorStyle),這是個枚舉類型
(2)設置分割線的顏色,能夠直接使用系統給出的顏色,若是系統給定的顏色不能知足需求時,也能夠自定義。
補充:顏色分爲24位和32位的,以下
24bit顏色
R 8bit 0 ~ 255
G 8bit 0 ~ 255
B 8bit 0 ~ 255
32bit顏色
A 8bit 0 ~ 255(tou)
R 8bit
G 8bit
B 8bit
#ff ff ff 白色
#00 00 00 黑色
#ff 00 00 紅色
#255 00 00
設置爲自定義顏色的實例:tableview.separatorColor = [UIColorcolorWithRed:0/255.0green:255/255.0blue:0/255.0alpha:255/255.0];
//接收的參數是顏色的比例值
(3)設置頂部和底部視圖
tableview.tableHeaderView //頂部
tableview.tableFooterView //底部