剑客
关注科技互联网

iOS开发-选择城市

实现思路

1. 首先我们需要城市数据资源,这里存到了plist文件里。

2. 从plist里面取出城市数据,自己实现index索引列表。

3. 代理方法传值,将列表页选中的数据传到上一页面。

plist 文件格式如下图:

iOS开发-选择城市

代码示范:

HYCityViewController.h文件

//  HYCityViewController.h

#import <UIKit/UIKit.h>

//代理声明

@protocol HYCityViewDelegate <NSObject>

– (void)sendCityName:(NSString *)name;

@end

@interface HYCityViewController : UIViewController

@property (nonatomic,weak)id <HYCityViewDelegate> 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 ()<UITableViewDelegate,UITableViewDataSource>

@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[i] 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[i]];

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 ()<HYCityViewDelegate>

@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开发-选择城市

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址