UITableViewCell點擊展開/關(guān)閉

第一種方法:

先說原理:
1.在cell中定義一個屬性:isSelected用來標(biāo)記cell的選中狀態(tài);
2.在Controller中定義一個屬性:lastCell,標(biāo)記上次選中的cell, 再定義另外一個屬性:selectedIndexPath,用來標(biāo)記當(dāng)前選中的cell的索引;
3.在Controller的返回cell的代理方法中,判斷cell的isSelected狀態(tài),根據(jù)狀態(tài)返回不同的cell樣式(展開或折疊樣式);
4.在返回高度的方法中同樣的根據(jù)狀態(tài)返回高度;
5.在didSelectedRowAtIndexPath代理方法中,先獲取到當(dāng)前點擊的cell,再判斷本次點擊的cell是否是之前選中的cell(即lastCell);如果不是,則說明點擊了一個新的cell,則將上次點擊的cell的選中狀態(tài)置為NO (lastCell.isSelected = NO); 再將當(dāng)前點擊的cell的isSelected狀態(tài)取反;
如果本次點擊的cell還是上次點擊的cell,則直接將當(dāng)前cell的isSelected狀態(tài)取反即可; 之后刷新tabelView, 最后將本次點擊的cell賦給lastCell;

代碼:
//dataSource方法中
//返回cell
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell * cell = nil;
    XCommodity *producte = self.selectedCommodities[indexPath.row];
    
    if (producte.isSelected){
        cell = [tableView dequeueReusableCellWithIdentifier:selectedCommodityCellIdenifier1 forIndexPath:indexPath];
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
    } else {
        cell = [tableView dequeueReusableCellWithIdentifier:selectedCommodityCellIdenifier forIndexPath:indexPath];
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
    }
    return cell;
}
//返回高度
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    XCommodity *cc =self.selectedCommodities[indexPath.row];
    if(cc.isSelected) {
        return 164;
    }
    return 95;
}
//delegate方法中
-(void)reset {
    if (self.lastCommodity) {
        self.lastCommodity.isSelected = NO;
    }
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    XCommodity *producte = self.selectedCommodities[indexPath.row];
    if (self.lastCommodity != producte ) {
        [self reset];
    }
  
    self.tableViewSelecteRow = indexPath.row;
    if (producte.isSelected) {
         producte.isSelected = NO;
    } else {
         producte.isSelected = YES;
    }
    [tableView reloadData];
    self.lastCommodity = producte;
    [tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES];
}

第二種方法:

<這種方法有缺陷:點擊同一個cell,第一次點擊展開,再點擊無法折疊>
直接貼代碼吧

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    //先獲取到對應(yīng)的model
    XEntityTicketModel *model = self.selectedEntityArr[indexPath.row];
    if (self.selectedIndexPath && indexPath.row == self.selectedIndexPath.row) {
        //展開
        XSelectedEntityCell *cell = [tableView dequeueReusableCellWithIdentifier:@"selectedEntityCell" forIndexPath:indexPath];
        [cell configureSelectedCellWithModel:model];
        
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
        
        //事件響應(yīng)
        [cell.cancelBtn addTarget:self action:@selector(cancleBtnActon:) forControlEvents:UIControlEventTouchUpInside];
        [cell.reduceBtn addTarget:self action:@selector(reduceBtnAction:) forControlEvents:UIControlEventTouchUpInside];
        [cell.increaseBtn addTarget:self action:@selector(increaseBtnAction:) forControlEvents:UIControlEventTouchUpInside];
        
        return cell;
    } else {
        //收起
        XUnselectedEntityCell *cell = [tableView dequeueReusableCellWithIdentifier:@"unSelectedCell" forIndexPath:indexPath];
        [cell configureUnselectedCellWithModel:model];
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
        return cell;
    }
    return nil;
}
//返回高度
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    if (self.selectedIndexPath && indexPath.row == self.selectedIndexPath.row) {
            return 165;
    }
    return 90;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    //記錄下選中的索引
    self.selectedIndexPath = indexPath;
    [self.tableView reloadData];
}

以上,OVER.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市搞疗,隨后出現(xiàn)的幾起案子复隆,更是在濱河造成了極大的恐慌澡腾,老刑警劉巖小染,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件钮呀,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機帆调,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進店門奠骄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來豆同,“玉大人,你說我怎么就攤上這事含鳞∮靶猓” “怎么了?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵蝉绷,是天一觀的道長鸭廷。 經(jīng)常有香客問我,道長熔吗,這世上最難降的妖魔是什么辆床? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮桅狠,結(jié)果婚禮上讼载,老公的妹妹穿的比我還像新娘。我一直安慰自己中跌,他們只是感情好咨堤,可當(dāng)我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著漩符,像睡著了一般一喘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上嗜暴,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天凸克,我揣著相機與錄音,去河邊找鬼闷沥。 笑死萎战,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的狐赡。 我是一名探鬼主播撞鹉,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼颖侄!你這毒婦竟也來了鸟雏?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤览祖,失蹤者是張志新(化名)和其女友劉穎孝鹊,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體展蒂,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡又活,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年苔咪,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片柳骄。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡团赏,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出耐薯,到底是詐尸還是另有隱情舔清,我是刑警寧澤,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布曲初,位于F島的核電站体谒,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏臼婆。R本人自食惡果不足惜抒痒,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望颁褂。 院中可真熱鬧故响,春花似錦、人聲如沸痢虹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽奖唯。三九已至惨缆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間丰捷,已是汗流浹背坯墨。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留病往,地道東北人捣染。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像停巷,于是被迫代替她去往敵國和親耍攘。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,828評論 2 345

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理畔勤,服務(wù)發(fā)現(xiàn)蕾各,斷路器,智...
    卡卡羅2017閱讀 134,599評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,512評論 25 707
  • 1,Search Bar 怎樣去掉背景的顏色(storyboard里只能設(shè)置background顏色庆揪,可是發(fā)現(xiàn)cl...
    以德扶人閱讀 2,331評論 2 50
  • 欲望是無止盡的,而生命是有限的 精力是有限的式曲,用在刀刃上 偷 偷 偷 偷時間,偷精力,偷知識吝羞,偷財富
    查蘇的吉古勒閱讀 198評論 0 1
  • 我手機出現(xiàn)微信钧排,qq不打開程序接收不到信息敦腔,打開之后,上方會顯示無法連接服務(wù)器卖氨,等一會才恢復(fù)正常会烙,才能接收到信息。...
    大叔老了閱讀 99評論 0 0