365bet亚洲版登录-bet官网365入口

365bet亚洲版登录拥有超过百间客房,bet官网365入口的文化历经几十年的传承和积淀形成的核心内容获得业界广泛的认可,365bet亚洲版登录是目前信誉最高的娱乐场所,同国内外几百家网上内容供应商建立了合作关系。

简易QQ下拉列表

接下去就一步步来看, 首先创设了八个模型类, 贰个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;// 自定义方法用来赋值-setFriendGroupDic:(NSMutableDictionary *)dic;@end

FriendGroup.m

#import "FriendGroup.h"#import "Friend.h"@implementation FriendGroup-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- viewDidLoad { [super viewDidLoad]; self.allArray =[NSMutableArray array]; [self creatTableView]; [self getData];}- 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];}// 获取数据- 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];}- tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { return 50;}// SectionView必须实现的协议方法- touchAction:(SectionView *)sectionView { }#pragma mark - TableView Delegate-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- didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.}@end

能够从地方代码看见, 创立了四个tableView. 并基于数组个数给分区数量赋值, 然后在tableView: viewForHeaderInSection:方法里, 用三个自定的view给分区头视图赋值. 在tableView: cellForRowAtIndexPath:方法里给每一个分区对应的cell实行了赋值. 先看一下效果.

图片 14BBD0DAF-210B-4520-9E0A-5F084D25827E.png

从上海教室能够看见以往每种分区中对相应差异数额的row,可是还尚未完毕我们想要的效果.所以再往下一连看.

SectionView.m

-touchesBegan:touches withEvent:(UIEvent *)event{ [self.delegate touchAction:self];}/* [self.delegate touchAction:self]; 协议方法会刷新tableview,然后会刷新tableview的 viewForHeaderInSection:方法 就会重新布局SectionView所以会走layoutSubviews方法 */-layoutSubviews{ [super layoutSubviews];// 改变imageView的transform属性 点击时有开闭的效果 [UIView animateWithDuration:0.3 animations:^{ _imageView.transform = _group.opened ? CGAffineTransformMakeRotation : CGAffineTransformMakeRotation; }];}

点击SectionView时 就让代理人去试行左券方式,但是在VC的情商方式中什么都没写, 所以需求健全一下

- 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;}

成效如下图

图片 2DropList.gif

本文由365bet亚洲版登录发布于计算机网络,转载请注明出处:简易QQ下拉列表

您可能还会对下面的文章感兴趣: