TableViewCell上的TextField保存值問(wèn)題

遇到的需求如下

需求需要對(duì)住宿類型進(jìn)行添加覆糟,有多個(gè)需要商戶輸入的元素,比如價(jià)格馋记,時(shí)間,房間類型懊烤,圖片......
在這個(gè)情況下肯定選用tableView來(lái)實(shí)現(xiàn)梯醒,但是tableViewCell的復(fù)用會(huì)導(dǎo)致數(shù)據(jù)的錯(cuò)亂,如果不復(fù)用又會(huì)內(nèi)存消耗比較大奸晴,如果找到復(fù)用cell且數(shù)據(jù)不錯(cuò)亂的方法就成了最優(yōu)選擇。

這個(gè)問(wèn)題其實(shí)只需要找到tableView的代理方法就行了日麸。

//cell移出屏幕顯示是回調(diào)的代理
- (void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath*)indexPath NS_AVAILABLE_IOS(6_0);

在這個(gè)代理里面更新cell的數(shù)據(jù)到對(duì)應(yīng)的model中即可寄啼。
ViewController.m代碼如下

#import "ViewController.h"
#import "InputTableViewCell.h"
#import "RoomModel.h"

static NSString *identifier = @"cell";

@interface ViewController ()<UITableViewDelegate, UITableViewDataSource>

@property (weak, nonatomic) IBOutlet UITableView *mainTB;

@property (nonatomic, strong) NSMutableArray *rooms;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.mainTB.rowHeight = 200;
    
    self.rooms = [[NSMutableArray alloc]init];
    
    for (NSInteger i = 0; i < 30; i++) {
        RoomModel *model = [[RoomModel alloc]init];
        model.name = @"";
        model.price = @"";
        [self.rooms addObject:model];
    }
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return 30;
}


- (void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath*)indexPath{
    RoomModel *model = self.rooms[indexPath.row];
    
    InputTableViewCell *inputCell = (InputTableViewCell *)cell;
    
    model.name = inputCell.nameTF.text;
    model.price = inputCell.priceTF.text;
    
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

    InputTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
    if (cell == nil) {
        cell = [[InputTableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
    }
    cell.indexLabel.text = [NSString stringWithFormat:@"%ld", indexPath.row + 1];
    
    RoomModel *model = self.rooms[indexPath.row];
    cell.nameTF.text = model.name;
    cell.priceTF.text = model.price;
    
    return cell;
}


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}


@end

RoomModel類代碼如下

//RoomModel.h
#import <Foundation/Foundation.h>

@interface RoomModel : NSObject

@property (nonatomic, copy) NSString *name;
@property (nonatomic, strong) NSString *price;

@end


//RoomModel.m
#import "RoomModel.h"

@implementation RoomModel

@end

InputTableViewCell類代碼如下

//InputTableViewCell.h
#import <UIKit/UIKit.h>

@interface InputTableViewCell : UITableViewCell

@property (nonatomic, strong) UITextField *nameTF;
@property (nonatomic, strong) UITextField *priceTF;

@property (nonatomic, strong) UILabel *indexLabel;

@end

//InputTableViewCell.m
#import "InputTableViewCell.h"
#import "Masonry.h"

@implementation InputTableViewCell

- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        self.indexLabel = [[UILabel alloc]init];
        [self.contentView addSubview:self.indexLabel];
        
        self.nameTF = [[UITextField alloc]init];
        self.nameTF.borderStyle = UITextBorderStyleRoundedRect;
        [self.contentView addSubview:self.nameTF];
        
        self.priceTF = [[UITextField alloc]init];
        self.priceTF.borderStyle = UITextBorderStyleRoundedRect;
        [self.contentView addSubview:self.priceTF];
        
        [self.indexLabel mas_makeConstraints:^(MASConstraintMaker *make) {
            make.left.top.bottom.equalTo(self.contentView).offset(0);
            make.width.equalTo(@30);
        }];
        
        [self.nameTF mas_makeConstraints:^(MASConstraintMaker *make) {
            make.left.equalTo(self.indexLabel.mas_right).offset(8);
            make.top.equalTo(self.contentView).offset(8);
            make.right.equalTo(self.contentView).offset(-8);
            make.bottom.equalTo(self.priceTF.mas_top).offset(-8);
            make.height.equalTo(self.priceTF.mas_height);
        }];
        
        [self.priceTF mas_makeConstraints:^(MASConstraintMaker *make) {
            make.left.equalTo(self.indexLabel.mas_right).offset(8);
            make.right.bottom.equalTo(self.contentView).offset(-8);
        }];
        
    }
    return self;
}

- (void)awakeFromNib {
    [super awakeFromNib];
    // Initialization code
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
    [super setSelected:selected animated:animated];

    // Configure the view for the selected state
}

@end

這樣就通過(guò)復(fù)用TableViewCell來(lái)實(shí)現(xiàn)數(shù)據(jù)的管理,多看一下TableView的方法代箭,也許問(wèn)題就很簡(jiǎn)單了墩划。

示例工程

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市嗡综,隨后出現(xiàn)的幾起案子乙帮,更是在濱河造成了極大的恐慌,老刑警劉巖极景,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件察净,死亡現(xiàn)場(chǎng)離奇詭異驾茴,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)氢卡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門锈至,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人译秦,你說(shuō)我怎么就攤上這事峡捡。” “怎么了筑悴?”我有些...
    開(kāi)封第一講書人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵们拙,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我阁吝,道長(zhǎng)砚婆,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任求摇,我火速辦了婚禮射沟,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘与境。我一直安慰自己验夯,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開(kāi)白布摔刁。 她就那樣靜靜地躺著挥转,像睡著了一般。 火紅的嫁衣襯著肌膚如雪共屈。 梳的紋絲不亂的頭發(fā)上绑谣,一...
    開(kāi)封第一講書人閱讀 49,071評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音拗引,去河邊找鬼借宵。 笑死,一個(gè)胖子當(dāng)著我的面吹牛矾削,可吹牛的內(nèi)容都是我干的壤玫。 我是一名探鬼主播,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼哼凯,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼欲间!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起断部,我...
    開(kāi)封第一講書人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤猎贴,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體她渴,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡达址,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了惹骂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片苏携。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖对粪,靈堂內(nèi)的尸體忽然破棺而出右冻,到底是詐尸還是另有隱情,我是刑警寧澤著拭,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布纱扭,位于F島的核電站,受9級(jí)特大地震影響儡遮,放射性物質(zhì)發(fā)生泄漏乳蛾。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一鄙币、第九天 我趴在偏房一處隱蔽的房頂上張望肃叶。 院中可真熱鬧,春花似錦十嘿、人聲如沸因惭。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蹦魔。三九已至,卻和暖如春咳燕,著一層夾襖步出監(jiān)牢的瞬間勿决,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工招盲, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留低缩,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓曹货,卻偏偏與公主長(zhǎng)得像咆繁,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子控乾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 1.ios高性能編程 (1).內(nèi)層 最小的內(nèi)層平均值和峰值(2).耗電量 高效的算法和數(shù)據(jù)結(jié)構(gòu)(3).初始化時(shí)...
    歐辰_OSR閱讀 29,321評(píng)論 8 265
  • *面試心聲:其實(shí)這些題本人都沒(méi)怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個(gè)offer,總結(jié)起來(lái)就是把...
    Dove_iOS閱讀 27,125評(píng)論 29 470
  • iOS網(wǎng)絡(luò)架構(gòu)討論梳理整理中么介。娜遵。蜕衡。 其實(shí)如果沒(méi)有APIManager這一層是沒(méi)法使用delegate的,畢竟多個(gè)單...
    yhtang閱讀 5,165評(píng)論 1 23
  • 一、簡(jiǎn)介 <<UITableView(或簡(jiǎn)單地說(shuō)慨仿,表視圖)的一個(gè)實(shí)例是用于顯示和編輯分層列出的信息的一種手段 <<...
    無(wú)邪8閱讀 10,584評(píng)論 3 3
  • 知道我們?yōu)槭裁丛絹?lái)越少話說(shuō)了嗎? 剛開(kāi)始万皿,我們雖然不熟摧找,但卻聊的來(lái),有時(shí)候能聊到凌晨?jī)扇c(diǎn)牢硅。 但是蹬耘,后來(lái),我們沒(méi)怎...
    扎丸子頭的櫻桃閱讀 1,645評(píng)論 0 1