猫猫学IOS(十二)UI之UITableView学习(上)LOL英雄联盟练习

2024-09-05 07:48

本文主要是介绍猫猫学IOS(十二)UI之UITableView学习(上)LOL英雄联盟练习,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

猫猫分享,必须精品

素材代码地址:http://blog.csdn.net/u013357243/article/details/44706671
原文地址:http://blog.csdn.net/u013357243?viewmode=contents

先看效果图

这里写图片描述
这里写图片描述
这里写图片描述

源代码

NYViewController的代码

//ps:新建iOS交流学习群:304570962 
可以加猫猫QQ:1764541256 或则微信znycat 
让我们一起努力学习吧。 
原文:http://blog.csdn.net/u013357243?viewmode=contents
//  NYViewController.m
//  06 - lol英雄联盟
//
//  Created by apple on 15-3-28.
//  Copyright (c) 2015年 znycat. All rights reserved.
//#import "NYViewController.h"
#import "NYHero.h"
@interface NYViewController () <UITableViewDataSource,UITableViewDelegate>
@property (strong,nonatomic) UITableView *tableView;
@property (strong,nonatomic) NSArray *heros;
@end@implementation NYViewController-(NSArray *)heros
{if (_heros == nil)_heros = [NYHero heros];return _heros;
}/**懒加载tableView*/
-(UITableView *)tableView
{if (_tableView == nil) {//表格控件在创建时必须指定样式//        UITableViewStylePlain 平板格式//        UITableViewStyleGrouped分组格式_tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];//添加数据源->加入协议_tableView.dataSource = self;/*设置行高方法有两种,代理方法的优先级比setRowHeight的优先级高。应用场景,很多应用程序,每一行高度是不一样的,例如:新浪微博*/
//        _tableView.rowHeight = 80;//第一种_tableView.delegate = self;//第二种,要设置代理,-》协议 -》实现代理方法[self.view addSubview:_tableView];}return _tableView;
}
- (void)viewDidLoad
{[super viewDidLoad];[self tableView];
}#pragma mark - 数据源方法/**每个分组中的数据总数*/
-(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{return self.heros.count;
}/**告诉表格,每个单元格的明细*/
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{/*UITableViewCellStyleDefault        默认类型 标题+可选图像UITableViewCellStyleValue1         标题+明细+图像UITableViewCellStyleValue2         不显示图像,标题+明细UITableViewCellStyleSubtitle       标题+明细+图像*/NSLog(@"表格行明细 %d",indexPath.row);//static 静态变量,能够保证系统为变量在内存中只分配一次内存空间//静态变量,一旦创建,就不会被释放,只有在应用程序在销毁是,才会释放。static NSString *ID = @"cell";//1,去缓存池查找可重复用得单元格UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];//2,如果没找到if (cell == nil) {//        NSLog(@"实例化单元格");cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;}//设置单元格内容
//    取出英雄对象NYHero *hero = self.heros[indexPath.row];//设置标题 :英雄名字cell.textLabel.text = hero.name;//设置详细内容: 英雄描述cell.detailTextLabel.text = hero.intro;//设置英雄图标cell.imageView.image = [UIImage imageNamed:hero.icon];// 设置右边的箭头// 1> UITableViewCellAccessoryDisclosureIndicator 箭头,可以"提示"用户,当前行是可以点击的,通常选中行,会跳到新的页面// 2> UITableViewCellAccessoryCheckmark 对号,通常提示用户该行数据设置完毕,使用的比较少// 3> UITableViewCellAccessoryDetailButton 按钮,通常点击按钮可以做独立的操作,例如alertView//    点击按钮并不会选中行// 4> UITableViewCellAccessoryDetailDisclosureButton 按钮+箭头,各自操作
//      cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;// 指定右侧的自定义视图/**通常accessoryType提供的类型不能满足时,才会使用自定义控件但是需要自行添加监听方法,通常用在自定义cell,不要写在视图控制器中!!!自定义控件的事件触发,同样不会影响表格行的选中!*///    UISwitch *switcher = [[UISwitch alloc] init];
//    //添加监听方法
//    [switcher addTarget:self action:@selector(switchChanged:) forControlEvents:UIControlEventValueChanged];
//   
//    cell.accessoryView = switcher;return cell;
}-(void)switchChanged:(UISwitch *) sender
{NSLog(@"%s %@", __func__, sender);
}#pragma mark - 实现代理方法 (行高设置)
/**设置行高,比setRowHeight优先级高*/
-(CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{return 70;
}// 取消选中某一行,极少用,极容易出错!
// didDeselectRowAtIndexPath
// didSelectRowAtIndexPath
- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{NSLog(@"%s %@", __func__, indexPath);
}/**选中了某一行*/
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{NSLog(@"%s   %@",__func__, indexPath);}/**accessoryType为按钮时,UITableViewCellAccessoryDetailButton点击右侧按钮的监听方法此方法不会触发行选中,跟行选中各自独立只是为accessoryType服务,对自定义控件不响应 */
- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath
{NSLog(@"%s %@", __func__, indexPath);
}@end

模型的代码的代码

//
//  NYHero.h
//  06 - lol英雄联盟
//
//  Created by apple on 15-3-28.
//  Copyright (c) 2015年 znycat. All rights reserved.
//#import <Foundation/Foundation.h>@interface NYHero : NSObject
@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSString *icon;
@property (nonatomic, copy) NSString *intro;-(instancetype) initWithDict:(NSDictionary *)dict;
+(instancetype) heroWithDict:(NSDictionary *)dict;
+(NSArray *) heros;@end

m实现文件

//
//  NYHero.m
//  06 - lol英雄联盟
//
//  Created by apple on 15-3-28.
//  Copyright (c) 2015年 znycat. All rights reserved.
//#import "NYHero.h"@implementation NYHero
-(instancetype)initWithDict:(NSDictionary *)dict
{self = [super init];if (self) {[self setValuesForKeysWithDictionary:dict];}return self;
}+(instancetype)heroWithDict:(NSDictionary *)dict
{return [[self alloc] initWithDict:dict];
}+(NSArray *)heros
{NSArray *array = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle]pathForResource:@"heros.plist" ofType:nil]];NSMutableArray *arrayM = [NSMutableArray array];for (NSDictionary *dict in array) {
//        这才是应该写的[arrayM addObject:[self heroWithDict:dict]];}return arrayM;
}
@end

猫猫犯二了——关于字典模型的类方法

猫猫今天犯二了,字典初始化方法中又一个竟然这么写了,不多说了,大家看看引以为见吧

@implementation NYHero
-(instancetype)initWithDict:(NSDictionary *)dict
{self = [super init];if (self) {[self setValuesForKeysWithDictionary:dict];}return self;
}+(instancetype)heroWithDict:(NSDictionary *)dict
{return [[self alloc] initWithDict:dict];
}+(NSArray *)heros
{NSArray *array = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle]pathForResource:@"heros.plist" ofType:nil]];NSMutableArray *arrayM = [NSMutableArray array];for (NSDictionary *dict in array) {//这里我原来是这么写的(注释的是错误的)//arrayM =[self heroWithDict:dict];
//        这才是应该写的[arrayM addObject:[self heroWithDict:dict]];}

这二犯的,关键用debug你看的话,他会有内容,但是因为名称差不太多,应该是heros返回值是一堆对象组成的数组,结果你NSLog就发现,他丫的就返回一个地址值,很奇怪,开始我还以为是xcode大姨妈来了呢。。。事实证明,代码里面无秘密啊。
——————话说这好像是猫猫写的代码中注释最少的耶。。。

代理模式阶段性小结

监听控件的某些事件
使用代理模式,是为了在程序直接“解耦”。

表格可以显示非常丰富的数据,为了达到这一结果,设置表格的“数据源”。
@required 必须实现的方法。
@optional 可选的实现方法->不强求实现->如果实现了能得到特殊的效果,如果不实现,也不影响程序的正常运行——能够增加控件的灵活度。


代理阶段性小结:(怎么用)
1,遵守协议,预先定义好方法,不实现,具体的实现工作由代理负责。
<控件的名字+DataSource> 定义的与数据有关的方法。
<控件的名字+Delegate> 定义的与事件有关的方法(通常用来监听控件事件)。

2,代理方法:
1> 方法名以控件名称开头(没有类前缀) -> 方便程序员书写的时候,快速找到需要的协议方法。
2> 第一个参数是自己 -> 意味着在协议方法中,可以直接访问对象的属性,或调用方法。
3> 代理方法的返回值 -> 控制器向控件(委托)发送数据 。


cell——UITableViewCell的注意点

缓存池的运用(老板本,后面会有新的东西更新,但是需要了解,看别人程序时候别不认识了——还有方便理解)

//1,去缓存池查找可重复用得单元格UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];//2,如果没找到if (cell == nil) {//        NSLog(@"实例化单元格");cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;}//3设置单元格内容//4return cell

初始化的时候需要指定cell的样式
UITableViewCellStyleDefault 默认类型 标题+可选图像
UITableViewCellStyleValue1 标题+明细+图像
UITableViewCellStyleValue2 不显示图像,标题+明细
UITableViewCellStyleSubtitle 标题+明细+图像

用法:

cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];

指定cell右侧的视图

设置右边的箭头
1> UITableViewCellAccessoryDisclosureIndicator 箭头,可以”提示”用户,当前行是可以点击的,通常选中行,会跳到新的页面
2> UITableViewCellAccessoryCheckmark 对号,通常提示用户该行数据设置完毕,使用的比较少
3> UITableViewCellAccessoryDetailButton 按钮,通常点击按钮可以做独立的操作,例如alertView

   点击按钮并不会选中行

4> UITableViewCellAccessoryDetailDisclosureButton 按钮+箭头,各自操作
cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;

指定右侧的自定义视图(例:选择按钮)

 通常accessoryType提供的类型不能满足时,才会使用自定义控件但是需要自行添加监听方法,通常用在自定义cell,不要写在视图控制器中!!!自定义控件的事件触发,同样不会影响表格行的选中!
    UISwitch *switcher = [[UISwitch alloc] init];//添加监听方法[switcher addTarget:self action:@selector(switchChanged:) forControlEvents:UIControlEventValueChanged];cell.accessoryView = switcher;

ps:新建iOS交流学习群:304570962
可以加猫猫QQ:1764541256 或则微信znycat
让我们一起努力学习吧。
原文:http://blog.csdn.net/u013357243?viewmode=contents

这篇关于猫猫学IOS(十二)UI之UITableView学习(上)LOL英雄联盟练习的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1138368

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

线性代数|机器学习-P36在图中找聚类

文章目录 1. 常见图结构2. 谱聚类 感觉后面几节课的内容跨越太大,需要补充太多的知识点,教授讲得内容跨越较大,一般一节课的内容是书本上的一章节内容,所以看视频比较吃力,需要先预习课本内容后才能够很好的理解教授讲解的知识点。 1. 常见图结构 假设我们有如下图结构: Adjacency Matrix:行和列表示的是节点的位置,A[i,j]表示的第 i 个节点和第 j 个