【iOS】UI学习——UITableView

打印 上一主题 下一主题

主题 690|帖子 690|积分 2070

UITableView底子

dateSource:数据代理对象
delegate:平常代理对象
numberOfSectionInTableView:得到组数协议
numberOfRowsInSection:得到行数协议
cellForRowAtIndexPath:创建单元格协议
UIViewController.h
  1. #import <UIKit/UIKit.h>
  2. @interface ViewController : UIViewController
  3. <
  4. //实现数据视图的普通协议
  5. //数据视图的普通事件处理
  6. UITableViewDelegate,
  7. //实现数据视图的数据代理协议
  8. //处理数据视图的数据代理
  9. UITableViewDataSource
  10. >
  11. {
  12.     //定义一个数据视图对象
  13.     //数据视图用来显示大量相同的格式的大量信息的视图
  14.     UITableView* _tableView;
  15. }
  16. @end
复制代码
ViewController.m
  1. #import "ViewController.h"
  2. @interface ViewController ()
  3. @end
  4. @implementation ViewController
  5. - (void)viewDidLoad {
  6.     [super viewDidLoad];
  7.    
  8.     //创建数据视图
  9.     //P1:数据视图的位置
  10.     //P2:数据视图的风格
  11.     //UITableViewStylePlain:普通风格
  12.     //UITableViewStyleGrouped:分组风格
  13.     _tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStyleGrouped];
  14.     //设置数据视图的代理对象
  15.     _tableView.delegate = self;
  16.     //设置数据视图的数据源对象
  17.     _tableView.dataSource = self;
  18.    
  19.     [self.view addSubview: _tableView];
  20.    
  21. }
  22. //获取每组元素的个数(行数)
  23. //程序在显示数据视图时会调用此函数
  24. //返回值:表示每组元素的个数
  25. //P1:数据视图对象本身 P2:那一组需要的行数
  26. -(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
  27. {
  28.     return 5;
  29. }
  30. //设置数据视图的组数
  31. -(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView
  32. {
  33.     return 3;
  34. }
  35. //创建单元格对象函数,传入两个参数
  36. //P1:传入这个函数的对象 P2:单元格的索引
  37. -(UITableViewCell*) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
  38. {
  39.     NSString* cellStr = @"cell";
  40.    
  41.     UITableViewCell* cell = [_tableView dequeueReusableCellWithIdentifier:cellStr];
  42.     if(cell == nil) {
  43.         //创建一个单元格对象,传入两个参数
  44.         //P1:单元格的样式 P2:单元格的副用标记
  45.         cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellStr];
  46.         
  47.     }
  48.     //indexPath.section表示组数
  49.     //indexPath.row表示行数
  50.     NSString* str = [NSString stringWithFormat:@"第%ld组,第%ld行!", indexPath.section, indexPath.row];
  51.     //将单元格的主文字内容赋值
  52.     cell.textLabel.text = str;
  53.     return cell;
  54. }
  55. @end
复制代码
UITableView协议

heightForRowAtIndexPath:获取单元格高度协议
heightForHeaderInSection:数据视图头部高度协议
heightForFooterInSection:数据视图尾部高度协议
titleForFooterINSection:数据视图尾部的标题协议
titleForHeaderInSection:数据视图头部标题协议
UIViewController.h
  1. #import <UIKit/UIKit.h>
  2. @interface ViewController : UIViewController
  3. <UITableViewDataSource,UITableViewDelegate>
  4. {
  5.     //定义数据视图对象
  6.     UITableView* _tableview;
  7.     //声明一个数据源
  8.     NSMutableArray* _arrayData;
  9. }
  10. @end
复制代码
UIViewController.m
  1. #import "ViewController.h"
  2. @interface ViewController ()
  3. @end
  4. @implementation ViewController
  5. - (void)viewDidLoad {
  6.     [super viewDidLoad];
  7.    
  8.     _tableview = [[UITableView alloc] initWithFrame:CGRectMake(0, 20, 480, 832) style:UITableViewStyleGrouped];
  9.     //设置代理对象
  10.     _tableview.delegate = self;
  11.     //设置数据视图代理对象
  12.     _tableview.dataSource = self;
  13.    
  14.     [self.view addSubview:_tableview];
  15.     //创建一个可变数组
  16.     _arrayData = [[NSMutableArray alloc] init];
  17.    
  18.     for(int i = 'A'; i <= 'Z'; i++) {
  19.         NSMutableArray* arraySmall = [[NSMutableArray alloc] init];
  20.         
  21.         for(int j = 1; j<=5; j++) {
  22.             NSString* str = [NSString stringWithFormat:@"%c%d", i, j];
  23.             
  24.             [arraySmall addObject:str];
  25.         }
  26.         //创建一个二维数组
  27.         [_arrayData addObject: arraySmall];
  28.     }
  29. }
  30. //获取组数
  31. -(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView
  32. {
  33.     return _arrayData.count;
  34. }
  35. //获取每组的元素个数
  36. -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
  37. {
  38.     NSInteger numRow = [[_arrayData objectAtIndex:section]count];
  39.     return numRow;
  40. }
  41. //获取单元格
  42. -(UITableViewCell*) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
  43. {
  44.     NSString *str = @"cell";
  45.         
  46.     UITableViewCell *cell = [_tableview dequeueReusableCellWithIdentifier: str];
  47.         if (cell == nil) {
  48.             cell = [[UITableViewCell alloc] initWithStyle: UITableViewCellStyleDefault reuseIdentifier: str];
  49.         }
  50.         cell.textLabel.text = _arrayData[indexPath.section][indexPath.row];
  51.         return cell;
  52. }
  53. //获取高度
  54. -(CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
  55. {
  56.     return 100;
  57. }
  58. //获取每组头部标题
  59. -(NSString*) tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
  60. {
  61.     return @"头部标题";
  62.    
  63. }
  64. //获取每组尾部标题
  65. -(NSString*) tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section
  66. {
  67.     return @"尾部标题";
  68. }
  69. -(CGFloat) tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
  70. {
  71.     return 40;
  72. }
  73. -(CGFloat) tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
  74. {
  75.     return 20;
  76. }
  77. @end
复制代码
效果图

UITableView高级协议和单元格

高级协议的几个函数
commitEditingStyle:提交编辑函数
canEditRowAtIndexPath:开启关闭编辑单元格
editingStyleForRowAtIndexPath:编辑单元格风格设定
didSelectRowAtIndexPath:选中单元格响应协议
didDeselectRowAtIndexPath:反选单元格响应协议
单元格几个函数
dequeueReusableCellWithIdentifier:获取可以复用的单元格对象
initWithStyle:根据风格创建单元格对象
reuseldentifier:设置可以复用单元格的ID
设置一个导航控制器
  1. #import "SceneDelegate.h"
  2. #import "ViewController.h"
  3. @interface SceneDelegate ()
  4. @end
  5. @implementation SceneDelegate
  6. - (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions {
  7.    
  8.     self.window.frame = [UIScreen mainScreen].bounds;
  9.    
  10.     UINavigationController* nav = [[UINavigationController alloc] initWithRootViewController:[[ViewController alloc] init]];
  11.    
  12.     self.window.rootViewController = nav;
  13. }
  14. - (void)sceneDidDisconnect:(UIScene *)scene {
  15.     // Called as the scene is being released by the system.
  16.     // This occurs shortly after the scene enters the background, or when its session is discarded.
  17.     // Release any resources associated with this scene that can be re-created the next time the scene connects.
  18.     // The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead).
  19. }
  20. - (void)sceneDidBecomeActive:(UIScene *)scene {
  21.     // Called when the scene has moved from an inactive state to an active state.
  22.     // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive.
  23. }
  24. - (void)sceneWillResignActive:(UIScene *)scene {
  25.     // Called when the scene will move from an active state to an inactive state.
  26.     // This may occur due to temporary interruptions (ex. an incoming phone call).
  27. }
  28. - (void)sceneWillEnterForeground:(UIScene *)scene {
  29.     // Called as the scene transitions from the background to the foreground.
  30.     // Use this method to undo the changes made on entering the background.
  31. }
  32. - (void)sceneDidEnterBackground:(UIScene *)scene {
  33.     // Called as the scene transitions from the foreground to the background.
  34.     // Use this method to save data, release shared resources, and store enough scene-specific state information
  35.     // to restore the scene back to its current state.
  36. }
  37. @end
复制代码
ViewController.h:
  1. #import <UIKit/UIKit.h>
  2. @interface ViewController : UIViewController<UITableViewDelegate,UITableViewDataSource>
  3. {
  4.     //数据视图
  5.     UITableView* _tableview;
  6.     //数据源
  7.     NSMutableArray* _arrayData;
  8.    
  9.     UIBarButtonItem* _btnEdit;
  10.     UIBarButtonItem* _btnFinish;
  11.     UIBarButtonItem* _btnDelete;
  12.    
  13.     BOOL _isEdit;
  14. }
  15. @end
复制代码
ViewController.m:
  1. #import "ViewController.h"
  2. @interface ViewController ()
  3. @end
  4. @implementation ViewController
  5. - (void)viewDidLoad {
  6.     [super viewDidLoad];
  7.    
  8.     _tableview = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];
  9.     //自动调整子视图的大小
  10.     _tableview.autoresizingMask = UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth;
  11.     //设置代理
  12.     _tableview.delegate = self;
  13.     _tableview.dataSource = self;
  14.     //数据视图头部视图的设定
  15.     _tableview.tableHeaderView = nil;
  16.     //数据视图尾部视图的设定
  17.     _tableview.tableFooterView = nil;
  18.    
  19.     [self.view addSubview:_tableview];
  20.    
  21.     _arrayData = [[NSMutableArray alloc] init];
  22.     //初始化数据源数组
  23.     for(int i = 0; i < 20; i++)
  24.     {
  25.         NSString* str = [NSString stringWithFormat:@"A %d", i];
  26.         
  27.         [_arrayData addObject:str];
  28.     }
  29.    
  30.     //当数据的数据源发生变化时
  31.     //更新数据视图,重新加载数据
  32.     [_tableview reloadData];
  33.     [self createBtn];
  34. }
  35. -(void) createBtn
  36. {
  37.     _isEdit = NO;
  38.     //设置导航栏按钮
  39.     _btnEdit = [[UIBarButtonItem alloc] initWithTitle:@"编译" style:UIBarButtonItemStyleDone target:self action:@selector(pressEdit)];
  40.     _btnDelete = [[UIBarButtonItem alloc] initWithTitle:@"删除" style:UIBarButtonItemStyleDone target:self action:nil];
  41.     _btnFinish = [[UIBarButtonItem alloc] initWithTitle:@"完成" style:UIBarButtonItemStyleDone target:self action:@selector(pressFinish)];
  42.    
  43.     self.navigationItem.rightBarButtonItem = _btnEdit;
  44. }
  45. -(void) pressEdit
  46. {
  47.     //修改对象编辑的状态
  48.     _isEdit = YES;
  49.     self.navigationItem.rightBarButtonItem = _btnFinish;
  50.     //开启编辑状态
  51.     [_tableview setEditing:YES];
  52.     self.navigationItem.leftBarButtonItem = _btnDelete;
  53. }
  54. -(void) pressFinish {
  55.     _isEdit = NO;
  56.     self.navigationItem.rightBarButtonItem = _btnEdit;
  57.     [_tableview setEditing:NO];
  58.     self.navigationItem.leftBarButtonItem = nil;
  59. }
  60. -(NSInteger) tableView:(UITableView*) tableView numberOfRowsInSection:(NSInteger)section
  61. {
  62.     return _arrayData.count;
  63. }
  64. //默认组数返回1
  65. -(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView
  66. {
  67.     return 1;
  68. }
  69. -(UITableViewCell*) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
  70. {
  71.     NSString* strID = @"ID";
  72.     //尝试获取可以复用的单元格
  73.     //如果得不到,返回nil
  74.     UITableViewCell* cell = [_tableview dequeueReusableCellWithIdentifier:strID];
  75.     if(cell == nil) {
  76.         cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:strID];
  77.     }
  78.     //单元格文字赋值
  79.     cell.textLabel.text = [_arrayData objectAtIndex:indexPath.row];
  80.     //设置文字子标题
  81.     cell.detailTextLabel.text = @"子标题";
  82.     //为单元格添加图片,设置图标
  83.     NSString* str = [NSString stringWithFormat:@"%d.png", 12];
  84.    
  85.     UIImage* image = [UIImage imageNamed:str];
  86.    
  87.     UIImageView* iView = [[UIImageView alloc] initWithImage:image];
  88.     cell.imageView.image = image;
  89.    
  90.     return cell;
  91. }
  92. -(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
  93. {
  94.     //默认为删除
  95.     //UITableViewCellEditingStyleInsert 增加
  96.     //UITableViewCellEditingStyleDone 空
  97.     return UITableViewCellEditingStyleDelete;
  98. }
  99. //可以显示编辑状态,当手指在单元格上移动时
  100. -(void) tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
  101. {
  102.     //删除数据源对应的数据
  103.     [_arrayData removeObjectAtIndex:indexPath.item];
  104.     //数据源更新
  105.     [_tableview reloadData];
  106.    
  107.     NSLog(@"delete");
  108. }
  109. -(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
  110. {
  111.     NSLog(@"选中单元格!%ld %ld", (long)indexPath.section, (long)indexPath.row);
  112. }
  113. -(void) tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
  114. {
  115.     NSLog(@"取消选中单元格 %ld %ld", (long)indexPath.section, (long)indexPath.row);
  116. }
  117. @end
复制代码
效果图


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

吴旭华

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表