0


【iOS】UI学习——UITableView

UI学习(四)

UITableView基础

dateSource

:数据代理对象

delegate

:普通代理对象

numberOfSectionInTableView

:获得组数协议

numberOfRowsInSection

:获得行数协议

cellForRowAtIndexPath

:创建单元格协议

UIViewController.h

#import<UIKit/UIKit.h>@interface ViewController : UIViewController
<//实现数据视图的普通协议//数据视图的普通事件处理
UITableViewDelegate,//实现数据视图的数据代理协议//处理数据视图的数据代理
UITableViewDataSource
>{//定义一个数据视图对象//数据视图用来显示大量相同的格式的大量信息的视图
    UITableView* _tableView;}@end

ViewController.m

#import"ViewController.h"@interfaceViewController()@end@implementation ViewController

-(void)viewDidLoad {[super viewDidLoad];//创建数据视图//P1:数据视图的位置//P2:数据视图的风格//UITableViewStylePlain:普通风格//UITableViewStyleGrouped:分组风格
    _tableView =[[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStyleGrouped];//设置数据视图的代理对象
    _tableView.delegate =self;//设置数据视图的数据源对象
    _tableView.dataSource =self;[self.view addSubview: _tableView];}//获取每组元素的个数(行数)//程序在显示数据视图时会调用此函数//返回值:表示每组元素的个数//P1:数据视图对象本身 P2:那一组需要的行数-(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{return5;}//设置数据视图的组数-(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView
{return3;}//创建单元格对象函数,传入两个参数//P1:传入这个函数的对象 P2:单元格的索引-(UITableViewCell*) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString* cellStr =@"cell";
    
    UITableViewCell* cell =[_tableView dequeueReusableCellWithIdentifier:cellStr];if(cell == nil){//创建一个单元格对象,传入两个参数//P1:单元格的样式 P2:单元格的副用标记
        cell =[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellStr];}//indexPath.section表示组数//indexPath.row表示行数
    NSString* str =[NSString stringWithFormat:@"第%ld组,第%ld行!", indexPath.section, indexPath.row];//将单元格的主文字内容赋值
    cell.textLabel.text = str;return cell;}@end

UITableView协议

heightForRowAtIndexPath

:获取单元格高度协议

heightForHeaderInSection

:数据视图头部高度协议

heightForFooterInSection

:数据视图尾部高度协议

titleForFooterINSection

:数据视图尾部的标题协议

titleForHeaderInSection

:数据视图头部标题协议

UIViewController.h

#import<UIKit/UIKit.h>@interface ViewController : UIViewController
<UITableViewDataSource,UITableViewDelegate>{//定义数据视图对象
    UITableView* _tableview;//声明一个数据源
    NSMutableArray* _arrayData;}@end

UIViewController.m

#import"ViewController.h"@interfaceViewController()@end@implementation ViewController

-(void)viewDidLoad {[super viewDidLoad];
    
    _tableview =[[UITableView alloc] initWithFrame:CGRectMake(0,20,480,832) style:UITableViewStyleGrouped];//设置代理对象
    _tableview.delegate =self;//设置数据视图代理对象
    _tableview.dataSource =self;[self.view addSubview:_tableview];//创建一个可变数组
    _arrayData =[[NSMutableArray alloc] init];for(int i ='A'; i <='Z'; i++){
        NSMutableArray* arraySmall =[[NSMutableArray alloc] init];for(int j =1; j<=5; j++){
            NSString* str =[NSString stringWithFormat:@"%c%d", i, j];[arraySmall addObject:str];}//创建一个二维数组[_arrayData addObject: arraySmall];}}//获取组数-(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView
{return _arrayData.count;}//获取每组的元素个数-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    NSInteger numRow =[[_arrayData objectAtIndex:section]count];return numRow;}//获取单元格-(UITableViewCell*) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *str =@"cell";
        
    UITableViewCell *cell =[_tableview dequeueReusableCellWithIdentifier: str];if(cell == nil){
            cell =[[UITableViewCell alloc] initWithStyle: UITableViewCellStyleDefault reuseIdentifier: str];}
        cell.textLabel.text = _arrayData[indexPath.section][indexPath.row];return cell;}//获取高度-(CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{return100;}//获取每组头部标题-(NSString*) tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{return@"头部标题";}//获取每组尾部标题-(NSString*) tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section
{return@"尾部标题";}-(CGFloat) tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{return40;}-(CGFloat) tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{return20;}@end

效果图
在这里插入图片描述

UITableView高级协议和单元格

高级协议的几个函数

commitEditingStyle

:提交编辑函数

canEditRowAtIndexPath

:开启关闭编辑单元格

editingStyleForRowAtIndexPath

:编辑单元格风格设定

didSelectRowAtIndexPath

:选中单元格响应协议

didDeselectRowAtIndexPath

:反选单元格响应协议
单元格几个函数

dequeueReusableCellWithIdentifier

:获取可以复用的单元格对象

initWithStyle

:根据风格创建单元格对象

reuseldentifier

:设置可以复用单元格的ID

设置一个导航控制器

#import"SceneDelegate.h"#import"ViewController.h"@interfaceSceneDelegate()@end@implementation SceneDelegate

-(void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions {self.window.frame =[UIScreen mainScreen].bounds;
    
    UINavigationController* nav =[[UINavigationController alloc] initWithRootViewController:[[ViewController alloc] init]];self.window.rootViewController = nav;}-(void)sceneDidDisconnect:(UIScene *)scene {// Called as the scene is being released by the system.// This occurs shortly after the scene enters the background, or when its session is discarded.// Release any resources associated with this scene that can be re-created the next time the scene connects.// The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead).}-(void)sceneDidBecomeActive:(UIScene *)scene {// Called when the scene has moved from an inactive state to an active state.// Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive.}-(void)sceneWillResignActive:(UIScene *)scene {// Called when the scene will move from an active state to an inactive state.// This may occur due to temporary interruptions (ex. an incoming phone call).}-(void)sceneWillEnterForeground:(UIScene *)scene {// Called as the scene transitions from the background to the foreground.// Use this method to undo the changes made on entering the background.}-(void)sceneDidEnterBackground:(UIScene *)scene {// Called as the scene transitions from the foreground to the background.// Use this method to save data, release shared resources, and store enough scene-specific state information// to restore the scene back to its current state.}@end

ViewController.h:

#import<UIKit/UIKit.h>@interface ViewController : UIViewController<UITableViewDelegate,UITableViewDataSource>{//数据视图
    UITableView* _tableview;//数据源
    NSMutableArray* _arrayData;
    
    UIBarButtonItem* _btnEdit;
    UIBarButtonItem* _btnFinish;
    UIBarButtonItem* _btnDelete;
    
    BOOL _isEdit;}@end

ViewController.m:

#import"ViewController.h"@interfaceViewController()@end@implementation ViewController

-(void)viewDidLoad {[super viewDidLoad];
    
    _tableview =[[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];//自动调整子视图的大小
    _tableview.autoresizingMask = UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth;//设置代理
    _tableview.delegate =self;
    _tableview.dataSource =self;//数据视图头部视图的设定
    _tableview.tableHeaderView = nil;//数据视图尾部视图的设定
    _tableview.tableFooterView = nil;[self.view addSubview:_tableview];
    
    _arrayData =[[NSMutableArray alloc] init];//初始化数据源数组for(int i =0; i <20; i++){
        NSString* str =[NSString stringWithFormat:@"A %d", i];[_arrayData addObject:str];}//当数据的数据源发生变化时//更新数据视图,重新加载数据[_tableview reloadData];[self createBtn];}-(void) createBtn
{
    _isEdit = NO;//设置导航栏按钮
    _btnEdit =[[UIBarButtonItem alloc] initWithTitle:@"编译" style:UIBarButtonItemStyleDone target:self action:@selector(pressEdit)];
    _btnDelete =[[UIBarButtonItem alloc] initWithTitle:@"删除" style:UIBarButtonItemStyleDone target:self action:nil];
    _btnFinish =[[UIBarButtonItem alloc] initWithTitle:@"完成" style:UIBarButtonItemStyleDone target:self action:@selector(pressFinish)];self.navigationItem.rightBarButtonItem = _btnEdit;}-(void) pressEdit
{//修改对象编辑的状态
    _isEdit = YES;self.navigationItem.rightBarButtonItem = _btnFinish;//开启编辑状态[_tableview setEditing:YES];self.navigationItem.leftBarButtonItem = _btnDelete;}-(void) pressFinish {
    _isEdit = NO;self.navigationItem.rightBarButtonItem = _btnEdit;[_tableview setEditing:NO];self.navigationItem.leftBarButtonItem = nil;}-(NSInteger) tableView:(UITableView*) tableView numberOfRowsInSection:(NSInteger)section
{return _arrayData.count;}//默认组数返回1-(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView
{return1;}-(UITableViewCell*) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString* strID =@"ID";//尝试获取可以复用的单元格//如果得不到,返回nil
    UITableViewCell* cell =[_tableview dequeueReusableCellWithIdentifier:strID];if(cell == nil){
        cell =[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:strID];}//单元格文字赋值
    cell.textLabel.text =[_arrayData objectAtIndex:indexPath.row];//设置文字子标题
    cell.detailTextLabel.text =@"子标题";//为单元格添加图片,设置图标
    NSString* str =[NSString stringWithFormat:@"%d.png",12];
    
    UIImage* image =[UIImage imageNamed:str];
    
    UIImageView* iView =[[UIImageView alloc] initWithImage:image];
    cell.imageView.image = image;return cell;}-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{//默认为删除//UITableViewCellEditingStyleInsert 增加//UITableViewCellEditingStyleDone 空return UITableViewCellEditingStyleDelete;}//可以显示编辑状态,当手指在单元格上移动时-(void) tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{//删除数据源对应的数据[_arrayData removeObjectAtIndex:indexPath.item];//数据源更新[_tableview reloadData];NSLog(@"delete");}-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{NSLog(@"选中单元格!%ld %ld",(long)indexPath.section,(long)indexPath.row);}-(void) tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{NSLog(@"取消选中单元格 %ld %ld",(long)indexPath.section,(long)indexPath.row);}@end

效果图
在这里插入图片描述

标签: ios ui 学习

本文转载自: https://blog.csdn.net/2301_79847748/article/details/139424756
版权归原作者 键盘敲没电 所有, 如有侵权,请联系我们删除。

“【iOS】UI学习——UITableView”的评论:

还没有评论