iOS模仿京东商城中的选择地区样式
在ViewController文件中創建添加地址界面:
@property(nonatomic,strong)UILabel *selectAreaLabel;//地區顯示
@property(nonatomic,strong)UITextField *nameTextF;//收貨人
@property(nonatomic,strong)UITextField *phoneTextF;//聯系方式
@property(nonatomic,strong)UITextField *addressTextF;//詳細地址
@property(nonatomic,copy)NSString *switchStr;//選擇按鈕值
@property(nonatomic,strong)SelectAreaView *selectView;//選擇地區視圖
@property(nonatomic,strong)UIView *smallBgView;//選擇地區下方白色區域
@property(nonatomic,strong)NSMutableArray *dataArray1;//地址列表數據
@property(nonatomic,strong)NSMutableArray *areaInfoArray;//返回地址相關信息
在數據請求成功后,添加半透明背景,添加可選擇的地區列表:
if (success)
??????? {
??????????? NSArray *itemArray = [[resultDic[@"ITEMS"] reverseObjectEnumerator] allObjects];
??????????? for (NSDictionary *dic in itemArray)
??????????? {
??????????????? [_dataArray1 addObject:dic];
??????????? }
??????????? _smallBgView = [[UIView alloc] initWithFrame:CGRectMake(0, f_Device_h, f_Device_w, f_Device_h)];
??????????? _smallBgView.backgroundColor = [UIColor darkGrayColor];
??????????? _smallBgView.alpha = 0.8;
??????????? [self.view addSubview:_smallBgView];
??????????? _selectView = [[SelectAreaView alloc] initWithProvinceList:CGRectMake(0, f_Device_h, f_Device_w, f_Device_h/3*2) dataArray:_dataArray1];
??????????? [self.view addSubview:_selectView];
???????????
??????????? [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(downSmallBgView:) name:@"downSmallBgV" object:nil];
??????? }
添加一個通知實現當地區選擇完成落下來后,執行的方法
#pragma mark --- 接收到通知
-(void)downSmallBgView:(NSNotification *)notifi
{
??? [UIView beginAnimations:nil context:nil];
??? [UIView setAnimationDuration:0.5];
??? _smallBgView.frame = CGRectMake(0, f_Device_h, f_Device_w, f_Device_h);
??? _selectView.frame = CGRectMake(0, f_Device_h, f_Device_w, f_Device_h/3*2);
??? [UIView commitAnimations];
?? ?
??? NSDictionary *dic = [notifi userInfo];
??? _areaInfoArray = [NSMutableArray arrayWithArray:dic[@"areaArray"]];
??? if (_areaInfoArray.count > 0)
??? {
??????? NSMutableString *muStr = [NSMutableString new];
??????? for (NSDictionary *areaDic in _areaInfoArray)
??????? {
??????????? NSString *nameStr = areaDic[@"adName"];
??????????? if (nameStr.length >0)
??????????? {
??????????????? [muStr appendString:nameStr];
??????????? }
??????? }
??????? _selectAreaLabel.text = muStr;
??? }
??? else
??? {
??????? _selectAreaLabel.text = @"無";
??? }
}
自定義一個選擇視圖
//初始化視圖方法
-(id)initWithProvinceList:(CGRect)frame dataArray:(NSMutableArray *)aDataArray
{
??? self = [super initWithFrame:frame];
??? if (self)
??? {
??????? self.backgroundColor = [UIColor whiteColor];
??????? self.itemDic = @{@"adCode":@"",@"adName":@"",@"id":@"",@"parentId":@""};
??????? self.areaMuArray = [NSMutableArray arrayWithObjects:_itemDic,_itemDic,_itemDic, nil];
??????? self.dataArray1 = [NSMutableArray arrayWithArray: aDataArray];
??????? self.dataArray2 = [NSMutableArray new];
??????? self.dataArray3 = [NSMutableArray new];
?????? ?
??????? UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, f_Device_w, 40)];
??????? titleLabel.text = @"選擇地區";
??????? titleLabel.textColor = [UIColor darkGrayColor];
??????? titleLabel.textAlignment = NSTextAlignmentCenter;
??????? titleLabel.font = [UIFont systemFontOfSize:15];
??????? [self addSubview:titleLabel];
?????? ?
??????? UIButton *closeBtn = [UIButton buttonWithType:UIButtonTypeCustom];
??????? closeBtn.frame = CGRectMake(f_Device_w-40, 5, 30, 30);
??????? [closeBtn setBackgroundImage:[UIImage imageNamed:@"close.png"] forState:UIControlStateNormal];
??????? [self addSubview:closeBtn];
??????? [closeBtn addTarget:self action:@selector(closeBtnClick:) forControlEvents:UIControlEventTouchUpInside];
?????? ?
??????? //省市區按鈕
??????? for (int i = 0; i < 3; i ++)
??????? {
??????????? UIButton *sBtn = [UIButton buttonWithType:UIButtonTypeCustom];
??????????? sBtn.frame = CGRectMake(20+50*i, 45, 50, 29);
??????????? if (i == 0)
??????????? {
??????????????? [sBtn setTitle:@"請選擇" forState:UIControlStateNormal];
??????????? }
??????????? sBtn.titleLabel.font = [UIFont systemFontOfSize:13];
??????????? sBtn.titleLabel.adjustsFontSizeToFitWidth = YES;
??????????? [sBtn setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
??????????? sBtn.tag = i+10;
??????????? [sBtn addTarget:self action:@selector(selectBtnClick:) forControlEvents:UIControlEventTouchUpInside];
??????????? [self addSubview:sBtn];
??????? }
?????? ?
??????? //分割
??????? UIView *lineView = [[UIView alloc] initWithFrame:CGRectMake(0, 74, f_Device_w, 1)];
??????? lineView.backgroundColor = [UIColor lightGrayColor];
??????? [self addSubview:lineView];
?????? ?
??????? _scrollV = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 75, f_Device_w, f_Device_h-f_Device_h/3-75)];
??????? _scrollV.showsHorizontalScrollIndicator = NO;
??????? _scrollV.pagingEnabled = YES;
??????? [self addSubview:_scrollV];
?????? ?
??????? for (int i = 0; i < 3; i ++)
??????? {
??????????? UITableView *tableViewW = [[UITableView alloc] initWithFrame:CGRectMake(f_Device_w*i, 0, f_Device_w, f_Device_h-f_Device_h/3-75) style:UITableViewStylePlain];
??????????? tableViewW.delegate = self;
??????????? tableViewW.dataSource = self;
??????????? tableViewW.rowHeight = 30;
??????????? tableViewW.tag = i+1;
??????????? tableViewW.separatorStyle = UITableViewCellSeparatorStyleNone;
??????????? [_scrollV addSubview:tableViewW];
??????? }
?????? ?
??? }
??? return self;
}
當選擇地區后,執行的方法
#pragma mark --- 選中后執行方法
//參數說明:1:上一個表格數組,2:點擊的是第幾行數據,3:標題按鈕的tag值,4:滑動視圖有幾個f_Device_w,5:下一個表格數組
-(void)showSelectViewArray1:(NSMutableArray *)aDataArray1 indexPathRow:(int)aRow buttonTag1:(int)aTag1 xPoint:(int)aXi dataArray2:(NSMutableArray *)aDataArray2
{
??? NSDictionary *dic = [NSDictionary dictionaryWithDictionary:aDataArray1[aRow]];
??? UIButton *buttonN1 = (UIButton *)[self viewWithTag:aTag1];
??? [buttonN1 setTitle:dic[@"adName"] forState:UIControlStateNormal];
??? [buttonN1 setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
?? ?
??? [_areaMuArray replaceObjectAtIndex:aXi-2 withObject:dic];
?? ?
??? [self cityListHttpRequestIdStr:dic[@"id"] dataArray2:aDataArray2 buttonTag:aTag1 tableViewTag:aXi];
}
#pragma mark --- 市縣區數據請求
//參數說明:1:上一個表格數組中的id,2:下一個表格數組,3:標題按鈕tag值,4:tableView的tag值
-(void)cityListHttpRequestIdStr:(NSString *)parentIdStr dataArray2:(NSMutableArray *)aDataArray2 buttonTag:(int)btnTag tableViewTag:(int)aTag
效果圖:
????
仿京東商城選擇地區樣式詳細講解源碼Demo:http://download.csdn.net/detail/hbblzjy/9603813
總結
以上是生活随笔為你收集整理的iOS模仿京东商城中的选择地区样式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怪物AI之发现玩家(视觉范围发现系列)
- 下一篇: qt项目转Xcode项目(Xcode开发