import "AppDelegate.h"
import "RootViewController.h"
@interface AppDelegate ()
@end
@implementation AppDelegate
-
(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];RootViewController *rootVC = [[RootViewController alloc]init];
UINavigationController *navC = [[UINavigationController alloc]initWithRootViewController:rootVC];
[self.window setRootViewController:navC];return YES;
}
import "RootViewController.h"
@interface RootViewController ()<UITableViewDataSource,UITableViewDelegate>
@property (nonatomic ,retain)NSArray *dataArray; // 數(shù)據(jù)源庶诡,用來給cell賦值
@property (nonatomic ,retain)NSDictionary *dict;
@property (nonatomic ,retain)NSMutableArray *titleArray; // 用來盛放頭標(biāo)題
@end
@implementation RootViewController
-
(void)viewDidLoad {
[super viewDidLoad];
// 初始化數(shù)據(jù)源并且添加數(shù)據(jù)
self.dataArray = [NSArray arrayWithObjects:@"A",@"B",@"C",@"D",@"E",@"F",@"G",@"H",@"I",@"J", nil];NSArray *arr = [NSArray arrayWithObjects:@"G",@"E",@"F",@"G",@"H", nil];
self.dict = [NSDictionary dictionaryWithObjectsAndKeys:_dataArray,@"0",arr,@"1", nil];// 添加頭標(biāo)題
self.titleArray = [NSMutableArray array];
for (NSArray *arrayItem in self.dict.allValues) {
// 從數(shù)組中取出第一個元素
// 判斷字典中的元素是否存在末誓,如果存在它的類型是否為數(shù)組 且存在數(shù)組元素(不為空)
if (arrayItem && [arrayItem isKindOfClass:[NSArray class]] && arrayItem.count) {
NSString *nameStr = [arrayItem objectAtIndex:0];
// 判斷數(shù)組中的元素是否存在傀蚌,如果存在類型是否為字符串,如果為字符串類型撩幽,判斷字符串長度是否為零
if (nameStr && [nameStr isKindOfClass:[NSString class]] && nameStr.length) {
// 截取字符串的首個字符
NSString *resultStr = [nameStr substringToIndex:1];
// 將首個字符串添加進數(shù)組
[self.titleArray addObject:resultStr];
}
}
}self.navigationItem.title = @"RootVC";
// 創(chuàng)建表視圖
// 設(shè)置分割線樣式 style:設(shè)置單元格樣式箩艺,有兩種樣式:plain(平鋪) group ,默認樣式為:plain
UITableView *tableView = [[UITableView alloc]initWithFrame:self.view.frame style:UITableViewStyleGrouped];
// 設(shè)置分割線樣式
tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
// 設(shè)置分割線顏色
tableView.separatorColor = [UIColor orangeColor];
// 如果我們每個的cell的高度是統(tǒng)一的榨惰,可以直接用屬性來設(shè)置
tableView.rowHeight = 60;tableView.dataSource = self;
tableView.delegate = self;
[self.view addSubview:tableView];
}
pragma mark --- 表視圖的代理方法
// 共有多少個分區(qū) 此代理方法為可選的琅催,如果不實現(xiàn)該代理方法虫给,默認整個表視圖只有一個分區(qū)
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
// return 1;
// 返回字典中元素的個數(shù),作為分區(qū)的個數(shù)
return self.dict.count;
}
// 每個分區(qū)下返回的行數(shù)
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
// return 10;
// 這里單元格個數(shù)一般不寫死缠黍,將數(shù)據(jù)源的個數(shù)作為返回值瓷式,根據(jù)數(shù)據(jù)的數(shù)量創(chuàng)建單元格的數(shù)量
// return self.dataArray.count;// 返回所有數(shù)據(jù)的個數(shù)
// 根據(jù)當(dāng)前所在的分區(qū)贸典,取得字典中對應(yīng)的鍵
// NSString *keyString = self.dict.allKeys[section];
// // 根據(jù)鍵取出對應(yīng)的值,由于字典的值為數(shù)組瓤漏,所以可以有count屬性
// return [self.dict[keyString] count];
// 根據(jù)所在分區(qū)取出字典的值
NSArray *array = [self.dict.allValues objectAtIndex:section];
return array.count;
}
// 定義單元格 IndexPath:單元格當(dāng)前所在位置
-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *identifier = @"cell";
// identifier: 因為一個表視圖中可能存在多種樣式的單元格蔬充,我們把相同樣式的單元格放到同一個集合里面,為這個集合加標(biāo)示符榨呆,當(dāng)我們需要用到某種樣式的單元格的時候庸队,根據(jù)不同的標(biāo)示符,從不同的集合中找尋單元格
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];// 在某個標(biāo)示符下竿拆,可以再度被移出重新使用的cell
// ? 如果從集合中為找到單元格丙笋,也就是集合中好沒有單元格煌贴,也就是還沒有單元格出屏幕,那么我們需要創(chuàng)建單元格
if (!cell) {
// 創(chuàng)建cell的時候需要標(biāo)示符是因為,當(dāng)該cell出屏幕的時候?qū)卧癜凑詹煌愋头湃牒图?br>
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:identifier];
// 設(shè)置cell的Style怠肋,不涉及到數(shù)據(jù)的重新賦值淹朋,我們可以在初始化cell的時候給它設(shè)置好
// 設(shè)置輔助視圖
cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;
// 設(shè)置選中后的效果
cell.selectionStyle = UITableViewCellSelectionStyleDefault;
}
// 創(chuàng)建單元格
// UITableViewCell *cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil];
// 為cell上添加文字 indexPath.row : 單元格所在的行數(shù)
// cell.textLabel.text = [NSString stringWithFormat:@"我是第%ld個單元格,我在%ld分區(qū)",(long)indexPath.row+1,indexPath.section];
// indexPath.row是得到當(dāng)前單元格所在的那一行础芍,起始位置為0,數(shù)組下標(biāo)的起始位置也是零春感,所以我們可以根據(jù)單元格所在的行數(shù)來從數(shù)組中取值顯示
// cell.textLabel.text = [self.dataArray objectAtIndex:indexPath.row];
// NSString *keyString = self.dict.allKeys[indexPath.section];
// NSArray *array = self.dict[keyString];
NSArray *valueArray = [self.dict.allValues objectAtIndex:indexPath.section];
cell.textLabel.text = [valueArray objectAtIndex:indexPath.row];
// 副標(biāo)題 這種樣式只能在非default的樣式下使用虏缸,只為顯示位置有所改變
cell.detailTextLabel.text = @"副標(biāo)題嫩实,顏色淺色";
// 不管任何Style樣式下,都給可以給cell添加圖片
cell.imageView.image = [UIImage imageNamed:@"11"];
return cell;
}
// 為每個分區(qū)頭添加標(biāo)題的代理方法
-(NSString*)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
// 為每個分區(qū)添加頭標(biāo)題
// NSArray *titArray = [NSArray arrayWithObjects:@"1",@"2", nil];
// return [titArray objectAtIndex:section];
// NSString *string = [[self.dict.allValues objectAtIndex:section] objectAtIndex:0];
// NSString *subStr = [string substringToIndex:1];
// return subStr;
int index = (int)(self.titleArray.count > section ? section : -1);
if (index != -1) {
return [self.titleArray objectAtIndex:section];
}else
return @"數(shù)組元素不夠了";
}
//? 點擊cell所響應(yīng)的代理方法
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
// 根據(jù)indexPath得到當(dāng)前所點擊的cell
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
NSLog(@"------%ld",(long)indexPath.row);
}
// 通過代理設(shè)置cell的高度
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
// 一般cell都需要根據(jù)內(nèi)容來自適應(yīng)高度甲献,高度的變化就在此處根據(jù)indexPath來更改(每個cell的高度不統(tǒng)一)
// 設(shè)置第一個cell高度200,其他都是100
if (indexPath.row == 0) {
return 100;
}
return 60;
}
// 添加右側(cè)索引條的代理方法
-(NSArray<NSString *> *)sectionIndexTitlesForTableView:(UITableView *)tableView{
return [NSArray arrayWithObjects:@"a",@"b",@"c",@"d", nil];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end