完成UItableview控件數據刷新
1、項目文件構造和plist文件
2、完成後果
1.解釋:這是一個豪傑展現界面,點擊選中行,可以修正轉業豪傑的稱號(完成數據刷新的操作).
運轉界面:
點擊選中行:
修正數據後主動刷新:
3、代碼示例
數據模子部門:
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)prefeXmlRss/ target=_blank class=infotextkey>XmlRss/ target=_blank class=infotextkey>RsstatusBarHidden
{
return YES;
}
@end
4、把經常使用的代碼封裝成一個帶參數的宏
封裝辦法和代碼:
//
// 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];
}
5、留意點
1.刷新數據的兩個步調:
1)修正模子
2)刷新表格數據(可以全體刷新,也能夠刷新指定的行)
2.在主掌握器文件中,遵照了三個協定
分離是:
UITableViewDataSource,
UIAlertViewDelegate,
UITableViewDelegate
UITableview控件應用小結
1、UITableview的應用步調
UITableview的應用就只要簡略的三個步調:
1.告知一共有若干組數據
辦法: - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;
2.告知每組一共有若干行
辦法: - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
3.設置每組每行(cell)
辦法: - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
2、應用解釋
1.若干組數據和顯示若干行平日是和數據互相關注的,在開辟中數據平日存儲在plist文件中,須要以必定的方法加載到項目中(模子)。
2.設置每組每行,說簡略點就是設置tableview中得每一個cell.
設置cell的步調有三步:
(1)創立一個cell(須要斟酌機能,對cell停止輪回應用,留意緩存處置方法)
(2)為cell設置數據
(3)前往一個cell
設置cell有三種方法:
(1)應用體系供給的tableviewcell停止設置
(2)經由過程xib自界說tableviewcell,實用於長相分歧的,如團購展現界面
(3)經由過程純代碼自界說tableviewcell,實用於有差距的,如表示為高度紛歧樣,有的cell具有某個屬性,而有的cell中沒有,如微博展現界面
3、自界說tableviewcell
1.經由過程xib文件自界說一個view的步調
(1)新建一個xib文件,描寫一個view的外部
(2)新建一個自界說的類,自界說的類須要繼續自體系自帶的view,繼續自哪一個類,取決於xib跟對象的class
(3)新建類的類型最好跟xib的文件名堅持分歧
(4)將xib的控件和自界說類的.m文件停止連線
(5)供給一個類的辦法前往一個創立好的自定iview(屏障從xib加載的進程)
(6)供給一個模子屬性讓外界傳遞模子數據
(7)重寫模子屬性的setter辦法,在這裡講模子數據展現到對應的子控件下面
2.經由過程代碼方法自界說cell
(1)新建⼀一個繼續自UITableViewCell的類
(2)重寫initWithStyle:reuseIdentifier:辦法
添加一切須要顯示的子控件(不須要設置子控件的數據和frame, 子控件要添加 到contentView中)
對子控件停止一次性的屬性設置(有些屬性只須要設置一次, 好比字體\固定的圖片)
(3)供給2個模子
數據模子: 寄存文字數據\圖片數據
frame模子: 寄存數據模子\一切子控件的frame\cell的高度
(4)cell具有一個frame模子(不要直接具有數據模子)
(5)重寫frame模子屬性的setter辦法: 在這個辦法中設置子控件的顯示數據和frame
(6)frame模子數據的初始化曾經采用懶加載的方法(每個cell對應的frame模子數據只加載一 次)
4、應用署理的步調
(1)先弄清晰誰是誰的署理(delegate)
(2)界說署理協定,協定稱號的定名標准:控件類名 + Delegate
(3)界說署理辦法
署理辦法普通都界說為@optional
署理辦法名都以控件名開首
署理辦法至多有1個參數,將控件自己傳遞出去
(4)設置署理(delegate)對象 (⽐好比myView.delegate = xxxx;)
署理對象遵照協定
署理對象完成協定外面該完成的辦法
(5)在適當的時辰調⽤署理對象(delegate)的署理辦法,告訴署理產生了甚麼工作
(在調⽤之前斷定署理能否完成了該署理⽅辦法)
【詳解iOS開辟中UItableview控件的數據刷新功效的完成】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!