最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

iOS開(kāi)發(fā)中TableView類(lèi)似QQ分組的折疊與展開(kāi)效果

 更新時(shí)間:2016年12月29日 11:27:22   作者:花落的花  
這篇文章主要介紹了iOS開(kāi)發(fā)中TableView類(lèi)似QQ分組的折疊與展開(kāi)效果,其實(shí)要做這個(gè)效果我先想到的是在tableView中再嵌套多個(gè)tableView。下面通過(guò)本文給大家分享實(shí)現(xiàn)思路,需要的朋友可以參考下

類(lèi)似QQ分組的樣子,實(shí)現(xiàn)tableView的折疊與展開(kāi)。其實(shí)要做這個(gè)效果我先想到的是在tableView中再嵌套多個(gè)tableView,這個(gè)想法實(shí)現(xiàn)起來(lái)就有點(diǎn)難了。

所以還是換個(gè)思路,把tableView的HeaderView用上了。給headerView加上手勢(shì),輕松解決折疊展開(kāi)的問(wèn)題。

直接上代碼吧。

@property (nonatomic, strong) UITableView *myTableView; 
@property (nonatomic, strong) NSMutableArray *listArray;  // 數(shù)據(jù)源
@property (nonatomic, strong) NSMutableArray *titlesArray;  // 分組的名稱(chēng)
@property (nonatomic, strong) NSMutableDictionary *openSectionDict; // 記錄哪個(gè)組展開(kāi)
- (void)viewDidLoad {
 [super viewDidLoad];
 // 初始化tableView
 _myTableView = [[UITableView alloc] initWithFrame:self.view.frame style:UITableViewStyleGrouped];
 self.myTableView.delegate = self;
 self.myTableView.dataSource = self;
 [self.view addSubview:_myTableView];
 self.openSectionDict = [[NSMutableDictionary alloc] init]; // 初始化字典
 [self setUpData];
}
// 給數(shù)據(jù)源賦值
- (void)setUpData {
 self.listArray = [NSMutableArray new];
 self.titlesArray = [NSMutableArray new];
 for (int i = 0; i < 5; i++) {  // 5個(gè)section
  [self.titlesArray addObject:[NSString stringWithFormat:@"section %d", i]];
  NSMutableArray *array = [NSMutableArray new];
  for (int i = 0; i < 4; i++) { // 每個(gè)section有4個(gè)row
   [array addObject:[NSString stringWithFormat:@"row %d", i]];
  }
  [self.listArray addObject:array];
 }
}
// 實(shí)現(xiàn)tableView的代理方法
#pragma mark - tableView dataSource
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
 return 5;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
 if ([[self.openSectionDict valueForKey:[NSString stringWithFormat:@"%ld", section]] integerValue] == 0) { //根據(jù)記錄的展開(kāi)狀態(tài)設(shè)置row的數(shù)量
  return 0;
 } else {
  return 4;
 }
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CELL_ID"];
 if (!cell) {
  cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"CELL_ID"];
  cell.textLabel.text = [NSString stringWithFormat:@"row %ld", indexPath.row];
 }
 return cell;
}
#pragma mark - tableView delegate
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
 return 45;
}
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
 return 40;
}
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
 UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.bounds.size.width, 40)];
 view.backgroundColor = [UIColor whiteColor];
 view.tag = KTAG + section;
 UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(20, 0, view.bounds.size.width, view.bounds.size.height)];
 label.text = self.titlesArray[section];
 [view addSubview:label];
 if ([[self.openSectionDict valueForKey:[NSString stringWithFormat:@"%ld", section]] integerValue] == 0) {
  UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(10, (view.bounds.size.height - 10) / 2, 7, 10)];
  imageView.image = [UIImage imageNamed:@"Triangle_right_gray"]; // 三角形小圖片
  [view addSubview:imageView];
 } else {
  UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(10, (view.bounds.size.height - 7) / 2, 10, 7)];
  imageView.image = [UIImage imageNamed:@"Triangle_down_gray"];
  [view addSubview:imageView];
 }
 UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(collegeTaped:)];
 [view addGestureRecognizer:tap];
 return view;
}
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
 return 0.1;
}
#pragma mark - sectionHeader clicked
- (void)collegeTaped:(UITapGestureRecognizer *)sender {
 NSString *key = [NSString stringWithFormat:@"%ld", sender.view.tag - KTAG];
 // 給展開(kāi)標(biāo)識(shí)賦值
 if ([[self.openSectionDict objectForKey:key] integerValue] == 0) {
  [self.openSectionDict setObject:@"1" forKey:key];
 } else {
  [self.openSectionDict setObject:@"0" forKey:key];
 }
 NSUInteger index = sender.view.tag;
 NSIndexSet *set = [NSIndexSet indexSetWithIndex:index - KTAG];
 [self.myTableView reloadSections:set withRowAnimation:UITableViewRowAnimationFade];
}

最后的效果:

以上所述是小編給大家介紹的iOS開(kāi)發(fā)中TableView類(lèi)似QQ分組的折疊與展開(kāi)效果,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • 基于Android實(shí)現(xiàn)仿QQ5.0側(cè)滑

    基于Android實(shí)現(xiàn)仿QQ5.0側(cè)滑

    本課程將帶領(lǐng)大家通過(guò)自定義控件實(shí)現(xiàn)QQ5.0側(cè)滑菜單,課程將循序漸進(jìn),首先實(shí)現(xiàn)最普通的側(cè)滑菜單,然后引入屬性動(dòng)畫(huà)與拖動(dòng)菜單效果相結(jié)合,最終實(shí)現(xiàn)QQ5.0側(cè)滑菜單效果。通過(guò)本課程大家會(huì)對(duì)側(cè)滑菜單有更深層次的了解,通過(guò)自定義控件和屬性動(dòng)畫(huà)打造千變?nèi)f化的側(cè)滑菜單效果
    2015-12-12
  • Android Menu詳解及示例代碼

    Android Menu詳解及示例代碼

    本文主要介紹Android Menu,這里對(duì)Android菜單(menu)進(jìn)行了詳細(xì)的介紹,并給出示例代碼和實(shí)現(xiàn)效果圖,有需要的小伙伴可以參考下
    2016-08-08
  • Android SDK Manager解決更新時(shí)的問(wèn)題 :Failed to fetch URL...

    Android SDK Manager解決更新時(shí)的問(wèn)題 :Failed to fetch URL...

    本文主要介紹解決安裝使用SDK Manager更新時(shí)的問(wèn)題:Failed to fetch URL...,這里提供了詳細(xì)的資料及解決問(wèn)題辦法,有需要的小伙伴可以參考下
    2016-09-09
  • Android使用PowerImageView實(shí)現(xiàn)播放強(qiáng)大的ImageView動(dòng)畫(huà)效果

    Android使用PowerImageView實(shí)現(xiàn)播放強(qiáng)大的ImageView動(dòng)畫(huà)效果

    今天我們就來(lái)編寫(xiě)一個(gè)PowerImageView控件,讓它既能支持ImageView控件原生的所有功能,同時(shí)還可以播放GIF圖片
    2018-05-05
  • 詳解Android Webview加載網(wǎng)頁(yè)時(shí)發(fā)送HTTP頭信息

    詳解Android Webview加載網(wǎng)頁(yè)時(shí)發(fā)送HTTP頭信息

    這篇文章主要介紹了詳解Android Webview加載網(wǎng)頁(yè)時(shí)發(fā)送HTTP頭信息的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • Flutter實(shí)現(xiàn)支付寶集五福手畫(huà)福字功能

    Flutter實(shí)現(xiàn)支付寶集五福手畫(huà)福字功能

    支付寶一年一度的集五?;顒?dòng)又開(kāi)始了,其中包含了一個(gè)功能就是手寫(xiě)福字,還包括撤銷(xiāo)一筆,清除重寫(xiě),保存相冊(cè)等。本文將介紹如何使用Flutter實(shí)現(xiàn)這些功能,感興趣的可以了解一下
    2022-01-01
  • Android開(kāi)發(fā)MQTT協(xié)議的模型及通信淺析

    Android開(kāi)發(fā)MQTT協(xié)議的模型及通信淺析

    這篇文章主要W為大家介紹了Android開(kāi)發(fā)MQTT協(xié)議的模型及通信淺析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • 詳解在Flutter中如何使用dio

    詳解在Flutter中如何使用dio

    應(yīng)用程序開(kāi)發(fā)的一個(gè)關(guān)鍵部分是優(yōu)雅地處理網(wǎng)絡(luò)請(qǐng)求。網(wǎng)絡(luò)返回的響應(yīng)可能包含意想不到的結(jié)果,為了獲得良好的用戶(hù)體驗(yàn),您需要提前處理邊緣情況。本文將詳細(xì)為大家介紹Flutter如何使用dio,需要的可以參考一下
    2022-04-04
  • Android自定義webView頭部進(jìn)度加載效果

    Android自定義webView頭部進(jìn)度加載效果

    這篇文章主要介紹了Android自定義webView頭部進(jìn)度加載效果,小編畫(huà)一條進(jìn)度線(xiàn),然后加載webview上面,具體實(shí)現(xiàn)代碼大家參考下本文
    2017-11-11
  • android實(shí)現(xiàn)驗(yàn)證碼按鈕

    android實(shí)現(xiàn)驗(yàn)證碼按鈕

    這篇文章主要為大家詳細(xì)介紹了android實(shí)現(xiàn)驗(yàn)證碼按鈕功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07

最新評(píng)論

弥勒县| 桐城市| 永城市| 孝义市| 雷州市| 谷城县| 丰都县| 府谷县| 井陉县| 盐城市| 浦城县| 柳江县| 蒙城县| 唐河县| 长春市| 张家口市| 滕州市| 苍溪县| 台中市| 崇文区| 怀柔区| 鄂尔多斯市| 津南区| 陈巴尔虎旗| 阿鲁科尔沁旗| 任丘市| 莫力| 交口县| 元谋县| 邹城市| 微博| 清徐县| 新野县| 呼图壁县| 黄陵县| 应城市| 疏附县| 岑巩县| 印江| 当阳市| 股票|