iOS开发UI篇—实现UITableview控件数据刷新

一、项目文件结构和plist文件

二、实现效果

1.说明:这是一个英雄展示界面,点击选中行,可以修改改行英雄的名称(完成数据刷新的操作).

运行界面:

点击选中行:

修改数据后自动刷新:

三、代码示例

数据模型部分:

YYheros.h文件

//
// YYheros.h
// 10-英雄展示(数据刷新)
//
// Created by apple on 14-5-29.
// Copyright (c) 2014年 itcase. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Global.h"

@interface YYheros : NSObject
@property(nonatomic,copy)NSString *name;
@property(nonatomic,copy)NSString *icon;
@property(nonatomic,copy)NSString *intro;

//-(instancetype)initWithDict:(NSDictionary *)dict;
//+(instancetype)herosWithDict:(NSDictionary *)dict;
YYinitH(hero)
@end

YYheros.m文件

//
// YYheros.m
// 10-英雄展示(数据刷新)
//
// Created by apple on 14-5-29.
// Copyright (c) 2014年 itcase. All rights reserved.
//

#import "YYheros.h"

@implementation YYheros
//-(instancetype)initWithDict:(NSDictionary *)dict
//{
// if (self=[super init]) {
self.name=dict[@"name"];
self.icon=dict[@"icon"];
self.intro=dict[@"intro"];
//
// //使用KVC
// [self setValuesForKeysWithDictionary:dict];
// }
// return self;
//}
//
//+(instancetype)herosWithDict:(NSDictionary *)dict
//{
// return [[self alloc]initWithDict:dict];
//}
YYinitM(hero)
@end

主控制器 YYViewController.m文件

//
// YYViewController.m
// 10-英雄展示(数据刷新)
//
// Created by apple on 14-5-29.
// Copyright (c) 2014年 itcase. All rights reserved.
//

#import "YYViewController.h"
#import "YYheros.h"

@interface YYViewController ()<UITableViewDataSource,UIAlertViewDelegate,UITableViewDelegate>
@property (strong, nonatomic) IBOutlet UITableView *tableview;
@property(nonatomic,strong)NSArray *heros;
@end

@implementation YYViewController

- (void)viewDidLoad
{
[super viewDidLoad];
//设置数据源
self.tableview.dataSource=self;
self.tableview.delegate=self;
self.tableview.rowHeight=60.f;
NSLog(@"%d",self.heros.count);
}

#pragma mark -懒加载
-(NSArray *)heros
{
if (_heros==nil) {

NSString *fullpath=[[NSBundle mainBundle]pathForResource:@"heros.plist" ofType:nil];
NSArray *temparray=[NSArray arrayWithContentsOfFile:fullpath];

NSMutableArray *arrayM=[NSMutableArray array];
for (NSDictionary *dict in temparray) {
YYheros *hero=[YYheros herosWithDict:dict];
[arrayM addObject:hero];
}
_heros=[arrayM mutableCopy];
}
return _heros;
}

#pragma mark- tableview的处理
//多少组
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
//多少行
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return self.heros.count;
}
//每组每行的数据,设置cell
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
//NSLog(@"cellForRowAtIndexPath 修改的了 %d", indexPath.row);
//1.去缓存中取
static NSString *identifier=@"hero";
UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:identifier];
//2.如果没有,那么就自己创建
if (cell==nil) {
NSLog(@"chuangjiancell");
cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
}
//3.设置数据

//3.1拿到该行的模型
YYheros *hero=self.heros[indexPath.row];
cell.textLabel.text=hero.name;
cell.imageView.image=[UIImage imageNamed:hero.icon];
cell.detailTextLabel.text=hero.intro;
//4.返回cell
return cell;
}

#pragma mark-数据刷新
//1.弹出窗口,拿到数据
//当某一行被选中的时候调用该方法
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
//拿到改行的数据模型
YYheros *hero=self.heros[indexPath.row];
UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"修改数据" message:nil delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil];

//密码框形式的
//alert.alertViewStyle=UIAlertViewStyleSecureTextInput;
alert.alertViewStyle=UIAlertViewStylePlainTextInput;
UITextField *text=[alert textFieldAtIndex:0];
//把当前行的英雄数据显示到文本框中
text.text=hero.name;
alert.tag=indexPath.row;
[alert show];
}
//2.修改数据,完成刷新操作
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
//1.修改模型
//如果选中的是取消,那么就返回,不做任何操作
if (0==buttonIndex) return;
//否则就修改模型,刷新数据
YYheros *hero=self.heros[alertView.tag];

//拿到当前弹窗中的文本数据(已经修改后的数据)
UITextField *text=[alertView textFieldAtIndex:0];
//用修改后的数据去修改模型
hero.name=text.text;

//2.刷新数据
// 只要调用tableview的该方法就会自动重新调用数据源的所有方法
// 会自动调用numberOfSectionsInTableView
// 会自动调用numberOfRowsInSection
// 会自动调用cellForRowAtIndexPath
// [self.tableview reloadData];

// 刷新指定行
NSIndexPath *path = [NSIndexPath indexPathForRow:alertView.tag inSection:0];
[self.tableview reloadRowsAtIndexPaths:@[path] withRowAnimation:UITableViewRowAnimationRight];
//如果不进行刷新会怎么样?(修改之后不会即时刷新,要等到重新对cell进行数据填充的时候才会刷新)
}
//隐藏状态栏
-(BOOL)prefersStatusBarHidden
{
return YES;
}
@end

四、把常用的代码封装成一个带参数的宏

封装方法和代码:

//
// Global.h
// 10-英雄展示(数据刷新)
//
// Created by apple on 14-5-29.
// Copyright (c) 2014年 itcase. All rights reserved.
//

#ifndef _0____________Global_h
#define _0____________Global_h

/**
* 自定义带参数的宏
*/
#define YYinitH(name) -(instancetype)initWithDict:(NSDictionary *)dict;\
+(instancetype)herosWithDict:(NSDictionary *)dict;

#define YYinitM(name) -(instancetype)initWithDict:(NSDictionary *)dict\
{\
if (self=[super init]) {\
[self setValuesForKeysWithDictionary:dict];\
}\
return self;\
}\
\
+(instancetype)herosWithDict:(NSDictionary *)dict\
{\
return [[self alloc]initWithDict:dict];\
}\

#endif

以后在需要使用的时候,只需要使用宏即可。

如在YYheros.m文件中使用YYinitM(hero)这一句代码可以代替下面的代码段:

-(instancetype)initWithDict:(NSDictionary *)dict
{
if (self=[super init]) {
// self.name=dict[@"name"];
// self.icon=dict[@"icon"];
// self.intro=dict[@"intro"];

//使用KVC
[self setValuesForKeysWithDictionary:dict];
}
return self;
}

+(instancetype)herosWithDict:(NSDictionary *)dict
{
return [[self alloc]initWithDict:dict];
}

五、注意点

1.刷新数据的两个步骤:

1)修改模型

2)刷新表格数据(可以全部刷新,也可以刷新指定的行)

2.在主控制器文件中,遵守了三个协议

分别是:

UITableViewDataSource,

UIAlertViewDelegate,

UITableViewDelegate

转载于:https://www.cnblogs.com/LifeTechnologySupporter/p/9679144.html

iOS开发UI篇—实现UITableview控件数据刷新相关推荐

  1. iOS开发UI篇—使用UItableview完成一个简单的QQ好友列表(一)

    iOS开发UI篇-使用UItableview完成一个简单的QQ好友列表(一) 一.项目结构和plist文件 二.实现代码 1.说明: 主控制器直接继承UITableViewController // ...

  2. iOS开发UI篇—手写控件,frame,center和bounds属性

    一.手写控件 1.手写控件的步骤 (1)使用相应的控件类创建控件对象 (2)设置该控件的各种属性 (3)添加控件到视图中 (4)如果是button等控件,还需考虑控件的单击事件等 (5)注意:View ...

  3. iOS开发UI篇—使用UItableview完成一个简单的QQ好友列表(二)

    一.实现效果             二.实现代码 1.数据模型部分 YYQQGroupModel.h文件 1 // 2 // YYQQGroupModel.h 3 // 02-QQ好友列表(基本数据 ...

  4. android tableview实现多选功能,iOS开发UI篇-tableView在编辑状态下的批量操作(多选)...

    先看下效果图 直接上代码 #import "MyController.h" @interface MyController () { UIButton *button; } @pr ...

  5. iOS开发UI篇—UITableview控件基本使用

    iOS开发UI篇-UITableview控件基本使用 一.一个简单的英雄展示程序 NJHero.h文件代码(字典转模型) 1 #import <Foundation/Foundation.h&g ...

  6. iOS开发UI篇—UITableview控件使用小结

    iOS开发UI篇-UITableview控件使用小结 一.UITableview的使用步骤 UITableview的使用就只有简单的三个步骤: 1.告诉一共有多少组数据 方法:- (NSInteger ...

  7. iOS开发UI篇—Date Picker和UITool Bar控件简单介绍

    iOS开发UI篇-Date Picker和UITool Bar控件简单介绍 一.Date Picker控件 1.简单介绍: Date Picker显示时间的控件 有默认宽高,不用设置数据源和代理 如何 ...

  8. iOS开发UI篇—直接使用UITableView Controller

    iOS开发UI篇-直接使用UITableView Controller 一.一般过程 1 // 2 // YYViewController.h 3 // UITableView Controller ...

  9. iOS开发UI篇-在UItableview中实现加载更多功能

    iOS开发UI篇-在UItableview中实现加载更多功能 一.实现效果 点击加载更多按钮,出现一个加载图示,三秒钟后添加两条新的数据. 二.实现代码和说明 当在页面(视图部分)点击加载更多按钮的时 ...

最新文章

  1. Linux与云计算——第二阶段 第五章:存储Storage服务器架设—分布式存储GlusterFS基础...
  2. FusionInsight LibrA V100R002C80SPC300安装指南
  3. 一个简单的例子教会您使用javap
  4. php fsockopen socket,PHP利用socket(fsockopen)的简单示例
  5. 为什么只有奇次谐波_治理变频器产生谐波的应用
  6. java对excel经行读写
  7. js中while死循环语句_如何检测JavaScript中的死循环?
  8. 统一返回码,返回结果实体类
  9. 使用XML Schema的简化配置方式
  10. oracle mrp mps mds 的table关联,ORACLE中的计划-Forecast/MDS/MPS/MRP(转)
  11. jQuery增加删除修改tab导航特效
  12. hysys动态模拟教程_(转载)HYSYS-过程模拟软件-稳态模拟-第一部分(一)
  13. 张宇高数 第二讲 一元函数微分学(思维导图)
  14. 本博客基于Handsome主题的一些小修改教程
  15. Daimayuan Online Judge 上帝的集合
  16. zcmu 1919: kirito's 星爆气流斩
  17. DML和DDL含义和区别
  18. 《自控力》 第二章读书笔记
  19. JDK和JRE区别 --学而不思则罔
  20. PCIe TLP详解

热门文章

  1. Nature:大脑空间导航研究五十年
  2. 脑机接口猴子通过“意念”打游戏!马斯克:未来能让瘫痪者用意念玩手机
  3. 人工智能学派之间的「联姻」——Yoshua 新作居然用DL「复活」了符号主义
  4. 人工智能产业2018年待解的三大难题
  5. 教育部发文:AI、算法等2018年进入全国高中课程!
  6. 因女朋友的一个建议,这位程序员创立仅 551 天公司就被 10 亿美元收购了
  7. 程序员有钱了都干什么?买豪宅,玩跑车,上太空!| 涛滔不绝
  8. CSDN 插件限时内测,新用户抢永久免费去广告特权!
  9. 现学现用!学完计组后,我马上在「我的世界」造了台显示器
  10. [国家集训队]航班安排