案例效果:

(1)先在storyboard中拖拽出一个tableView,然后下面用代码。

——tableView继承自scrollView。所以自然有滚动的特性

——最基本的还是数据转模型。以及对cell的赋值

——而cell的赋值那一块,为了优化性能。我们先从tableView的缓存中查找有无被缓存的cell。假设有。直接取出,假设没有再创建,这样提高性能。

——这个缓存池是tableView自带的,当滚动的时候。cell不在视线范围内时,这个cell就被放到缓存池里了。

#import "ViewController.h"
#import "WSHeros.h" @interface ViewController ()<UITableViewDataSource>
@property (weak, nonatomic) IBOutlet UITableView *tableView;
@property (strong,nonatomic) NSArray *herosArray;
@end @implementation ViewController - (void)viewDidLoad {
//定义数据源是谁
self.tableView.dataSource=self;
//每行高度
self.tableView.rowHeight=60;
//行间切割线颜色和样式
self.tableView.separatorColor=[UIColor colorWithRed:0 green:0 blue:1 alpha:1];
self.tableView.separatorStyle=UITableViewCellSeparatorStyleNone;
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
//隐藏状态栏
-(BOOL)prefersStatusBarHidden{
return YES;
}
//设置多少行
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return self.herosArray.count;//数组有多少就多少行
}
//设置每行的cell内容
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *ID=@"hero";
//1、先推断tableView中有无我们须要的缓存的cell,用ID类识别
UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:ID];
//2、假设没有,就直接创建。记得给ID识别号
if (cell==nil) {
cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];
}
//无论是直接取,还是直接创建。截止此处,有一个cell了。 //先利用indexPath.row取得行号相应的模型
WSHeros *hero=self.herosArray[indexPath.row];
//然后给cell赋值
cell.textLabel.text=hero.name;
cell.imageView.image=[UIImage imageNamed:hero.icon];
cell.detailTextLabel.text=hero.intro;
cell.accessoryType=UITableViewCellAccessoryDisclosureIndicator;
//cell还有背景以及选中背景等选项
cell.backgroundColor=[UIColor grayColor];
UIView *bgView=[[UIView alloc]init];
bgView.backgroundColor=[UIColor redColor];
cell.selectedBackgroundView=bgView;
return cell;
}
//字典转模型
-(NSArray *)herosArray{
if (_herosArray==nil) {
NSString *path=[[NSBundle mainBundle]pathForResource:@"heros.plist" ofType:nil];
NSArray *arr=[NSArray arrayWithContentsOfFile:path];
NSMutableArray * herosMuArr=[[NSMutableArray alloc]init];
for (NSDictionary * dict in arr) {
WSHeros *heros=[[WSHeros alloc]initWithDict:dict];
[herosMuArr addObject:heros];
}
_herosArray=herosMuArr;
}
return _herosArray;
} @end

(2)添加点击弹出alert的效果。而且能够改动名字

——由于用到监听tableView点击,所以须要引入协议

——由于用到监听用户点击了Alert里的哪个button。所以须要协议

@interface ViewController ()<UITableViewDataSource,UITableViewDelegate,UIAlertViewDelegate>

而且须要设置代理(Alert的代理。在创建的时候直接指定为self就可以)

- (void)viewDidLoad {
……
self.tableView.delegate=self;
……
}

——监听tableView被点击时,须要弹出一个带有textField的框。能够用alert.alertViewStyle属性设置,而且把这个模型里面的名字赋值给文本框显示出来。

——此外。还须要把是第几个模型,这个数字记录下来,在下一个方法监听点击alert哪个button的哪个里面须要用到,正好记录到alert的tag中。

——监听是否点击的时“确定”button。假设是,则先获取文本框文字,然后利用alert.tag找到相应的数据模型,用这个获得的文字替换原来的模型数据,最后刷新一下tableView,仅仅有改动数据模型。才干彻底改变tableView的显示结果,否则仅仅改动tableView,等又一次载入的时候还是会显示原来的数据。由于数据模型没有改动。

——思想是:用数据模型控制视图,即改动了数据模型,视图的呈现自然跟着改动。

——这里用到的知识点相对较多,涉及到tableView的reloadData方法。

——涉及到alertView得样式设置方法。

——还涉及到使用tableView和alertView的代理来实现监听。

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
WSHeros *hero=self.herosArray[indexPath.row];
UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"提示" message:nil delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"好的", nil];
alert.alertViewStyle=UIAlertViewStylePlainTextInput;
[alert textFieldAtIndex:0].text=hero.name;
alert.tag=indexPath.row;
[alert show];
} -(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
if (buttonIndex==0) return;
WSHeros *hero=self.herosArray[alertView.tag];
hero.name=[alertView textFieldAtIndex:0].text;
//这里须要传递一个indexPath数组,由于可能刷新不止一行。所以须要知道是几组几行。然后把非常多个组成数组传递进去
NSIndexPath *path=[NSIndexPath indexPathForRow:alertView.tag inSection:0];
[self.tableView reloadRowsAtIndexPaths:@[path] withRowAnimation:UITableViewRowAnimationBottom];
//下面是刷新所有数据
// [self.tableView reloadData];
}

终于效果:

【iOS开发-59】LOL案例:单组tabView、alertView样式、实现监听,以及用reloadData数据刷新的更多相关文章

  1. 李洪强iOS开发本人集成环信的经验总结_07_监听好友请求

    李洪强iOS开发本人集成环信的经验总结_07_监听好友请求 来到Appdalegate中: 遵守代理协议 设置代理  实现监听好友请求的回调的方法

  2. 【iOS开发-56】案例BUG:button的enabled、控件的userInteractionEnabled以及两种提示框UIAlert和UIActionSheet

    接上述案例找BUG:[iOS开发-51]案例学习:动画新写法.删除子视图.视图顺序.延迟方法.button多功能使用方法及icon图标和启动页设置 (1)BUG:答案满了就不能再点击optionbut ...

  3. 【iOS开发-51】案例学习:动画新写法、删除子视图、视图顺序、延迟方法、button多功能使用方法及icon图标和启动页设置

    案例效果: (1)导入所需的素材,然后用storyboard把上半截位置和大小相对固定的东西布局起来.当然,这些控件也要定义成对应地IBOutlet和IBAction方便兴许使用它们. 注意:本案例在 ...

  4. 【iOS开发-54】案例学习:通过UIScrollView的缩放图片功能练习代理模式的详细实现

    案例:(在模拟器中按住option键,点击鼠标就会出现缩放的手势) (1)在ViewController.m中: --缩放东西是UIScrollView除了滚动之外的还有一个功能,所以须要缩放的东西应 ...

  5. iOS开发——网络使用技术OC篇&网络爬虫-使用正则表达式抓取网络数据

    网络爬虫-使用正则表达式抓取网络数据 关于网络数据抓取不仅仅在iOS开发中有,其他开发中也有,也叫网络爬虫,大致分为两种方式实现 1:正则表达 2:利用其他语言的工具包:java/Python 先来看 ...

  6. iOS开发——网络实用技术OC篇&网络爬虫-使用java语言抓取网络数据

    网络爬虫-使用java语言抓取网络数据 前提:熟悉java语法(能看懂就行) 准备阶段:从网页中获取html代码 实战阶段:将对应的html代码使用java语言解析出来,最后保存到plist文件 上一 ...

  7. 2-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案安全篇(监听Wi-Fi和APP的数据)

    1-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案安全篇(来看一下怎么样监听网络数据,监听电脑上位机软件的数据) 因为那个软件只能监听咱自己电脑上的数据,所以咱就用电 ...

  8. 【iOS开发-60】案例学习:多组数据的tableView设置、添加右側组索引、多层数据模型设置以及valueForKeyPath

    效果: 这里的数据模型有两层:每一组汽车是一层模型,每一组里面的每一行汽车品牌也是一层模型. (1)我们先创建一个WSCars模型. 在WSCars.h中: #import <Foundatio ...

  9. IOS开发学习笔记028-UITableView单组数据显示代码优化

    1.如果表格中又几百条数据的话,系统会自动加载显示在界面上得数据,逐一加载 添加100个数据到UITableView中 ; i < ; i ++) { NSString *icon = [NSS ...

随机推荐

  1. 「NOIP2018」保卫王国

    「NOIP2018保卫王国」 题目描述 有一棵 \(n\) 个点, 点有点权 \(a_i\),\(m\) 组询问, 每次求钦点两个节点必须选或者必须不选后的树上最小点覆盖. \(1 \leq n, m ...

  2. python3-开发进阶Flask的基础(2)

    知识回顾 1.django 和flask区别? 最大的不同就是django请求相关的数据,通过参数一个一个传递过去的,而flask就是先把放在某个地方,然后去取,这个东西叫上下文管理 2.什么是wsg ...

  3. windows下eclipse搭建android_ndk开发环境

    安装cygwin: 由于NDK编译代码时必须要用到make和gcc,所以你必须先搭建一个linux环境, cygwin是一个在windows平台上运行的unix模拟环境,它对于学习unix/linux ...

  4. 1.6(SQL学习笔记)存储过程

    一.什么事存储过程 可以将存储过程看做是一组完成某个特定功能的SQL语句的集合. 例如有一个转账功能(A向B转账50),先将账户A中金额扣除50,然后将账户B中金额添加50. 那么我们可以定义一个名为 ...

  5. linux常见命令集合(下)

    1. tar zcvf backup-$(date "+%Y-%m-%d").tar.gz demo01dir 常用命令集合 echo helloworld date “+%y-% ...

  6. python开发_python操作mysql数据库

    如果你还没有准备好开发环境,你不妨花上一小点时间去看看:python开发_mysqldb安装 本篇blog是有关python操作mysql数据的相关内容. 我做了一个demo: 先看运行效果: mys ...

  7. CDOJ 1307 ABCDE 前缀和优化dp

    ABCDE 题目连接: http://acm.uestc.edu.cn/#/problem/show/1307 Description Binary-coded decimal (BCD) is a ...

  8. iOS开发中虚拟键盘相关的坑

    初学者在学习iOS开发时,遇到在一个textField中输入完内容后却发现虚拟键盘无法隐藏起来而不知所措的情况的人一定不占少数吧.这篇文章就说说我遇到的和虚拟键盘有关的三个问题及解决对策. 在模拟器测 ...

  9. How to put a relative path for a DLL statically loaded?

    How to put a relative path for a DLL statically loaded? I have a DLL made in Delphi 7/Windows XP tha ...

  10. 第九章openwrt 703N 网口转串口+串口转网口TTL 数据传输

    原生串口      1.WR703N 自带 TTL 电平串口,设备文件为/dev/ttyATH0, 波特率 115200.但是硬件串口 没有接出来,需要自己焊线.破壳. 图 1. 正面图.两根线 TP ...