亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

IOS實現簡易版的QQ下拉列表

2020-07-26 03:16:57
字體:
來源:轉載
供稿:網友

下面我們通過實例代碼來一步步看怎么實現, 首先建立了兩個模型類, 一個Friend, 一個FriendGroup類. 數據源用的本地的一個plist文件. plist文件中包含了FriendGroup的name,friends數組等屬性.

Friend.h 示例代碼

#import <Foundation/Foundation.h>@interface Friend : NSObject@property (nonatomic, copy) NSString *name;@end

FriendGroup.h 示例代碼

#import <Foundation/Foundation.h>@interface FriendGroup : NSObject@property (nonatomic, copy) NSString *name;// 數組中存放的為Friend類的實例對象@property (nonatomic, copy) NSMutableArray *friends;// 用來判斷分組是否打開(opened屬性正是實現下拉列表的關鍵)@property (nonatomic, assign, getter = isOpened) BOOL opened;// 自定義方法用來賦值-(void)setFriendGroupDic:(NSMutableDictionary *)dic;@end

FriendGroup.m 示例代碼

#import "FriendGroup.h"#import "Friend.h"@implementation FriendGroup-(void)setFriendGroupDic:(NSMutableDictionary *)dic{// 通過字典給FriendGroup的屬性賦值 [self setValuesForKeysWithDictionary:dic]; NSMutableArray *tempArray = [NSMutableArray array];// 遍歷friends屬性數組 for (NSMutableDictionary *dic in self.friends) {  Friend *friend = [[Friend alloc] init];  [friend setValuesForKeysWithDictionary:dic];  [tempArray addObject:friend];  } //重新對friends屬性數組賦值,此時存的都是Friend對象 self.friends = [NSMutableArray arrayWithArray:tempArray];}@end

在ViewController中創建一個tableView

#import "ViewController.h"#import "SectionView.h"#import "FriendGroup.h"#import "Friend.h"#define kTableViewReuse @"reuse"@interface ViewController ()<UITableViewDelegate, UITableViewDataSource, SectionViewDelegate>@property (nonatomic, strong) UITableView *tableView;// 數組中存放FriendGroup的實例對象@property (nonatomic, strong) NSMutableArray *allArray;@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; self.allArray =[NSMutableArray array]; [self creatTableView]; [self getData];}- (void)creatTableView { self.tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain]; _tableView.delegate = self; _tableView.dataSource = self; [_tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:kTableViewReuse]; [self.view addSubview:_tableView];}// 獲取數據- (void)getData { NSString *filePath = [[NSBundle mainBundle] pathForResource:@"friends.plist" ofType:nil]; NSArray *tempArray = [NSArray arrayWithContentsOfFile:filePath]; for (NSMutableDictionary *dic in tempArray) {  FriendGroup *friendGroup = [[FriendGroup alloc] init];  [friendGroup setFriendGroupDic:dic];  [self.allArray addObject:friendGroup]; } [self.tableView reloadData];}- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { return 50;}// SectionView必須實現的協議方法- (void)touchAction:(SectionView *)sectionView {}#pragma mark - TableView Delegate-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{ FriendGroup *friendGroup = [self.allArray objectAtIndex:section]; //放一個封裝的view,view上有一個label和imageVIew,自帶touch事件,點擊觸發協議方法 SectionView *sectionView = [[SectionView alloc] initWithFrame:CGRectMake(0, 0, 375, 50)]; sectionView.delegate = self; sectionView.tag = section + 1000; sectionView.textLabel.text = friendGroup.name; sectionView.group = friendGroup; return sectionView;}#pragma mark - TableView DataSource- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return _allArray.count;}- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return [_allArray[section] friends].count;}- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kTableViewReuse]; FriendGroup *friendGroup = _allArray[indexPath.section]; Friend *friend = friendGroup.friends[indexPath.row]; cell.textLabel.text = friend.name; return cell;}#pragma mark - Memory Waring- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.}@end

可以從上面代碼看到, 創建了一個tableView. 并根據數組個數給分區數量賦值, 然后在tableView: viewForHeaderInSection:方法里, 用一個自定的view給分區頭視圖賦值. 在tableView: cellForRowAtIndexPath:方法里給每個分區對應的cell進行了賦值. 先看一下效果.

從上圖可以看到現在每個分區中對應有不同數量的row,但是還沒有實現我們想要的效果.所以再往下繼續看.

SectionView.m

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ [self.delegate touchAction:self];}/* [self.delegate touchAction:self]; 協議方法會刷新tableview,然后會刷新tableview的 viewForHeaderInSection:方法 就會重新布局SectionView所以會走layoutSubviews方法 */-(void)layoutSubviews{ [super layoutSubviews];// 改變imageView的transform屬性 點擊時有開閉的效果 [UIView animateWithDuration:0.3 animations:^{  _imageView.transform = _group.opened ? CGAffineTransformMakeRotation(M_PI_2) : CGAffineTransformMakeRotation(0); }];}

點擊SectionView時 就讓代理人去執行協議方法,但是在VC的協議方法中什么都沒寫, 所以需要完善一下

- (void)touchAction:(SectionView *)sectionView {// 通過前面設置的tag值找到分區的index NSInteger index = sectionView.tag - 1000; FriendGroup *group = [self.allArray objectAtIndex:index];// 每次點擊, 狀態變為與原來相反的值 group.opened = !group.isOpened; [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:index] withRowAnimation:UITableViewRowAnimationNone];}

我們平時用的QQ下拉列表, 未打開時不顯示好友, 打開后才展示好友列表. 所以應該在numberOfRowsInSection方法中要進行設置.

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { FriendGroup *group = [self.allArray objectAtIndex:section];// 如果未打開 count為0 如果打開 count為group的屬性數組對應的個數 NSInteger count = group.isOpened ? group.friends.count : 0; return count;}

效果如下圖

總結

以上就是IOS實現簡易版的QQ下拉列表的全部內容,效果雖然很簡單,但還會希望對大家開發IOS有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久免费成人精品视频| 久久久久久久久亚洲| xxxxxxxxx欧美| 亚洲欧美日韩直播| 91精品国产网站| 欧美交受高潮1| 在线午夜精品自拍| 综合网日日天干夜夜久久| 原创国产精品91| 一区二区三区在线播放欧美| 欧美性猛交xxxxx免费看| 91精品久久久久久久久久另类| 欧美乱大交做爰xxxⅹ性3| 热久久99这里有精品| 97热精品视频官网| 久久精品一本久久99精品| 欧美国产日韩在线| 欧美性xxxx极品高清hd直播| 欧美日韩国产丝袜美女| 日韩av电影中文字幕| 亚洲欧洲在线观看| 97超碰蝌蚪网人人做人人爽| 日韩视频免费观看| 成人免费自拍视频| 国产精品xxxxx| 日韩av在线直播| 久久国产精品电影| 4438全国亚洲精品在线观看视频| 欧美综合在线观看| 亚洲人成在线电影| 性欧美亚洲xxxx乳在线观看| 亚洲欧美三级在线| 高清欧美性猛交xxxx黑人猛交| 久久影院在线观看| 日韩欧美在线观看| 日韩精品视频在线播放| 亚洲高清色综合| 在线亚洲男人天堂| 国产综合在线观看视频| 91精品久久久久久久久中文字幕| 国产精品v片在线观看不卡| 国产精品va在线播放| 国产视频精品va久久久久久| 欧美夫妻性生活xx| 亚洲乱亚洲乱妇无码| 国产精品视频一区二区高潮| 久久精品人人爽| 国产激情久久久久| 亚洲成人久久久久| 久久久999精品视频| 久久精品亚洲94久久精品| 亚洲国产成人av在线| xxx成人少妇69| 8x海外华人永久免费日韩内陆视频| 夜夜嗨av一区二区三区免费区| 在线色欧美三级视频| 1769国内精品视频在线播放| 国产精品久久久久久久久借妻| 亚洲无限av看| 亚洲精品欧美极品| 欧美又大又粗又长| 国产精品一区二区三区久久| 久久久欧美精品| 亚洲国产欧美日韩精品| 日韩经典中文字幕| 91av福利视频| 国内精品小视频在线观看| 黄网动漫久久久| 亚洲精选一区二区| 日韩最新免费不卡| 欧美一二三视频| 中文字幕日韩在线视频| 在线视频日本亚洲性| 国产婷婷97碰碰久久人人蜜臀| 亚洲精品99久久久久中文字幕| 孩xxxx性bbbb欧美| 欧美成人免费视频| 亚洲精品午夜精品| 亚洲欧美日韩视频一区| 大伊人狠狠躁夜夜躁av一区| 97超级碰碰人国产在线观看| 亚洲激情久久久| 中文字幕视频在线免费欧美日韩综合在线看| 欧美成人免费大片| 欧美日韩亚洲系列| 日本久久久久久| 黑人巨大精品欧美一区二区三区| 国产欧美欧洲在线观看| 欧美激情a在线| 最近中文字幕mv在线一区二区三区四区| 九九九热精品免费视频观看网站| 国产香蕉一区二区三区在线视频| 国产精品一区二区在线| 中文字幕一区电影| 亚洲成人动漫在线播放| 97国产成人精品视频| 伊人伊成久久人综合网站| 狠狠做深爱婷婷久久综合一区| 亚洲精品久久久久久久久久久久久| 色噜噜久久综合伊人一本| 日韩在线www| 欧美成人一区二区三区电影| 国产suv精品一区二区三区88区| 欧美精品18videos性欧美| www.久久撸.com| 欧美激情视频三区| 亚洲激情小视频| 欧美日韩成人网| 热草久综合在线| 亚洲精品欧美极品| 久久精品视频在线播放| 2025国产精品视频| 欧美日韩中文在线| 亚洲精品720p| 国产综合久久久久久| 日韩高清电影免费观看完整版| 久久人人爽亚洲精品天堂| 国产精品美女午夜av| 欧美高清视频免费观看| 91精品国产91久久久久久吃药| 精品亚洲一区二区三区四区五区| 久久九九精品99国产精品| 国产亚洲精品久久久久久| 亚洲天堂男人的天堂| 中日韩美女免费视频网址在线观看| 中文字幕不卡av| 亚洲精品美女视频| 亚洲精品免费av| 伦伦影院午夜日韩欧美限制| 国产精品日韩在线一区| 亚洲网在线观看| 亚洲电影免费观看高清完整版| 欧美性猛交xxxx乱大交| 在线观看视频99| 国产91精品在线播放| 欧美成人精品影院| 亚洲国产精品一区二区三区| 色综合导航网站| 亚洲人精选亚洲人成在线| 亚洲一区二区精品| 精品一区二区三区三区| 国产精品三级久久久久久电影| 国产在线播放不卡| 国产精品一区av| 精品亚洲永久免费精品| 国产综合色香蕉精品| 色妞久久福利网| 欧美电影在线观看网站| 社区色欧美激情 | 欧美在线观看一区二区三区| 欧洲美女7788成人免费视频| 91色视频在线观看| 精品国产一区二区三区久久| 久久九九国产精品怡红院| 在线观看中文字幕亚洲| 国产啪精品视频网站| 欧美在线视频观看免费网站| 91av中文字幕| 国产+成+人+亚洲欧洲| 亚洲国产免费av| 国产精品羞羞答答| 亚洲色图第三页| 成人福利在线视频| 激情av一区二区|