技术控

    今日:135| 主题:49488
收藏本版 (1)
最新软件应用技术尽在掌握

[其他] iOS开发-选择城市

[复制链接]
敷衍式℡活下去 发表于 2016-9-30 16:19:02
115 3

立即注册CoLaBug.com会员,免费获得投稿人的专业资料,享用更多功能,玩转个人品牌!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
实现思路 :
1. 首先我们需要城市数据资源,这里存到了plist文件里。
2. 从plist里面取出城市数据,自己实现index索引列表。
3. 代理方法传值,将列表页选中的数据传到上一页面。
  plist 文件格式如下图:
  
iOS开发-选择城市-1 (interface,property,protocol,import,数据源)

代码示范:
HYCityViewController.h文件
//  HYCityViewController.h
#import
//代理声明
@protocol HYCityViewDelegate
– (void)sendCityName:(NSString *)name;
@end
@interface HYCityViewController : UIViewController
@property (nonatomic,weak)id delegate;
@end
HYCityViewController.m文件
#import “HYCityViewController.h”
#define kScreen_width [UIScreen mainScreen].bounds.size.width
#define kScreen_height [UIScreen mainScreen].bounds.size.height
@interface HYCityViewController ()
@property (nonatomic,strong) UITableView *cityTableView;
/**
*  当前城市数据源
*/
@property (nonatomic,strong) NSMutableArray *dataSourceArr;
/**
*  索引数据源
*/
@property (nonatomic,strong) NSMutableArray *indexSourceArr;
@end
@implementation HYCityViewController
– (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
self.view.backgroundColor = [UIColor whiteColor];
[self initNav];
[self initDataSource];
[self initTableView];
}
– (void)initNav
{
UIView *bgView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, kScreen_width, 64)];
bgView.backgroundColor = [UIColor colorWithRed:241/255.0f green:241/255.0f  blue:241/255.0f  alpha:1.0f];
[self.view addSubview:bgView];
//取消按钮
UIButton *closeBtn = [UIButton buttonWithType:UIButtonTypeCustom];
closeBtn.frame = CGRectMake(20, 30, 20, 20);
[closeBtn setImage:[UIImage imageNamed:@”icon_nav_quxiao_normal”] forState:UIControlStateNormal];
[closeBtn addTarget:self action:@selector(closeBtn:) forControlEvents:UIControlEventTouchUpInside];
[bgView addSubview:closeBtn];
//标题
UILabel *titleLabel = [[UILabel alloc]initWithFrame:CGRectMake(kScreen_width/2-50, 30, 100, 25)];
titleLabel.textColor = [UIColor blackColor];
titleLabel.textAlignment = NSTextAlignmentCenter;
titleLabel.font = [UIFont systemFontOfSize:18];
titleLabel.text = @”选择城市”;
[bgView addSubview:titleLabel];
}
-(void)initTableView
{
self.cityTableView = [[UITableView alloc]initWithFrame:CGRectMake(0, 64, kScreen_width, kScreen_height – 64) style:UITableViewStylePlain];
self.cityTableView.dataSource = self;
self.cityTableView.delegate = self;
self.cityTableView.sectionIndexColor = [UIColor colorWithRed:252/255.0f green:74/255.0f blue:132/255.0f alpha:1.0f];
[self.view addSubview:self.cityTableView];
}
-(void)initDataSource
{
self.dataSourceArr = [[NSMutableArray alloc]init];
self.indexSourceArr = [[NSMutableArray alloc]init];
NSString *plistPath = [[NSBundle mainBundle]pathForResource:@”city” ofType:@”plist”];
NSMutableArray *cityArr = [[NSMutableArray alloc]initWithContentsOfFile:plistPath];
_dataSourceArr = [self sortArray:cityArr];
}
– (NSMutableArray *)sortArray:(NSMutableArray *)originalArray
{
NSMutableArray *array = [[NSMutableArray alloc]init];
//根据拼音对数组排序
NSArray *sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@”pinyin” ascending:YES]];
//排序
[originalArray sortUsingDescriptors:sortDescriptors];
NSMutableArray *tempArray = nil;
BOOL flag = NO;
//分组
for (int i = 0;i < originalArray.count; i++) {
NSString *pinyin = [originalArray objectForKey:@”pinyin”];
NSString *firstChar = [pinyin substringToIndex:1];
if (![_indexSourceArr containsObject:[firstChar uppercaseString]]) {
[_indexSourceArr addObject:[firstChar uppercaseString]];
tempArray = [[NSMutableArray alloc]init];
flag = NO;
}
if ([_indexSourceArr containsObject:[firstChar uppercaseString]]) {
[tempArray addObject:originalArray];
if (flag == NO) {
[array addObject:tempArray];
flag = YES;
}
}
}
return array;
}
#pragma mark dataSource
– (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return self.dataSourceArr.count;
}
– (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return [self.dataSourceArr[section] count];
}
– (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
return [_indexSourceArr objectAtIndex:section];
}
– (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
{
return _indexSourceArr;
}
– (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return 50;
}
– (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellIndentifier = @”cell”;
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIndentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIndentifier];
}
cell.textLabel.text = [[self.dataSourceArr[indexPath.section] objectAtIndex:indexPath.row] objectForKey:@”name”];
return cell;
}
#pragma mark – UITableViewDelegate
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
[tableView deselectRowAtIndexPath:indexPath animated:YES];
//代理传值
if (self.delegate != nil) {
[self.delegate sendCityName:[[self.dataSourceArr[indexPath.section] objectAtIndex:indexPath.row] objectForKey:@”name”]];
[self dismissViewControllerAnimated:YES completion:nil];
}
}
– (void)closeBtn:(UIButton *)sender
{
[self dismissViewControllerAnimated:YES completion:nil];
}
@end
ViewController.m文件
#import “ViewController.h”
#import “HYCityViewController.h”
@interface ViewController ()
@property (nonatomic,strong) UIBarButtonItem *leftBtn;
@end
@implementation ViewController
– (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
_leftBtn = [[UIBarButtonItem alloc]initWithTitle:@”北京” style:UIBarButtonItemStylePlain target:self action:@selector(selectCity)];
[_leftBtn setTintColor:[UIColor colorWithRed:252/255.0f green:74/255.0f blue:132/255.0f alpha:1.0f]];
self.navigationItem.leftBarButtonItem = _leftBtn;
}
– (void)selectCity{
HYCityViewController *cityVC = [[HYCityViewController alloc]init];
cityVC.delegate = self;
[self presentViewController:cityVC animated:YES completion:nil];
}
– (void)sendCityName:(NSString *)name{
[_leftBtn setTitle:name];
}
效果图:

iOS开发-选择城市-2 (interface,property,protocol,import,数据源)

友荐云推荐




上一篇:patter: `go test -v` as TAP output
下一篇:Push to production three times faster with the right git workflow
酷辣虫提示酷辣虫禁止发表任何与中华人民共和国法律有抵触的内容!所有内容由用户发布,并不代表酷辣虫的观点,酷辣虫无法对用户发布内容真实性提供任何的保证,请自行验证并承担风险与后果。如您有版权、违规等问题,请通过"联系我们"或"违规举报"告知我们处理。

不要給姐裝蒜 发表于 2016-10-4 13:16:48
上火,就容易缺经验,过去,我一直缺, 自从学会复制粘贴以后,我的经验小康了 ,一口气拿五点,不费劲儿,复制一次粘 贴无数次,真实惠
回复 支持 反对

使用道具 举报

kkkaaa 发表于 2016-10-16 19:39:24
很多天不上线,一上线就看到这么给力的帖子!
回复 支持 反对

使用道具 举报

春含 发表于 2016-10-21 05:34:58
虽然我不知道你在说什么 不过我知道你有钱所以你说的话肯定是对的
回复 支持 反对

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

我要投稿

推荐阅读

扫码访问 @iTTTTT瑞翔 的微博
回页顶回复上一篇下一篇回列表手机版
手机版/CoLaBug.com ( 粤ICP备05003221号 | 文网文[2010]257号 )|网站地图 酷辣虫

© 2001-2016 Comsenz Inc. Design: Dean. DiscuzFans.

返回顶部 返回列表