zoukankan      html  css  js  c++  java
  • 实现下拉弹出视图和Block的简单实现

    实现效果如下:

    实现代码如下:

      1 @interface ViewController ()<UIViewControllerTransitioningDelegate>
      2 
      3  
      4 
      5 {
      6 
      7     
      8 
      9     UILabel *optionLabel;   //显示选中值得label
     10 
     11     BOOL isPresentingOrDismissingOption;
     12 
     13     UIView *buildingOptionView;  //选择的视图
     14 
     15     
     16 
     17     
     18 
     19 }
     20 
     21 @end
     22 
     23  
     24 
     25 @implementation ViewController
     26 
     27  
     28 
     29 - (void)viewDidLoad {
     30 
     31     [super viewDidLoad];
     32 
     33  
     34 
     35     self.view.backgroundColor = [UIColor greenColor];
     36 
     37     buildingOptionView = [[UIView alloc] initWithFrame:CGRectMake(70, 100, 200, 50)];
     38 
     39     [self.view addSubview:buildingOptionView];
     40 
     41    
     42 
     43     buildingOptionView.backgroundColor = [UIColor redColor];
     44 
     45     buildingOptionView.layer.cornerRadius = 8;
     46 
     47     buildingOptionView.clipsToBounds = YES;
     48 
     49     UIGestureRecognizer *tapOnBuildingOpetionView = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapOnBuildingOpetionView:)];
     50 
     51     [buildingOptionView addGestureRecognizer:tapOnBuildingOpetionView];
     52 
     53     
     54 
     55     optionLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, buildingOptionView.width - 40, 50)];
     56 
     57     optionLabel.text = @"第一教学楼";
     58 
     59     [buildingOptionView addSubview:optionLabel];
     60 
     61     optionLabel.textColor = [UIColor blackColor];
     62 
     63     
     64 
     65     UIImageView *arrowImageView = [[UIImageView alloc] initWithFrame:CGRectMake(optionLabel.right + 10,optionLabel.top + 15,20,20)];
     66 
     67     arrowImageView.image = [UIImage imageNamed:@"classroom_arrow_icon"];
     68 
     69     [buildingOptionView addSubview:arrowImageView];
     70 
     71     
     72 
     73     
     74 
     75     
     76 
     77 }
     78 
     79  
     80 
     81 //手势触发方法
     82 
     83  
     84 
     85 - (void)tapOnBuildingOpetionView:(UITapGestureRecognizer *)tap{
     86 
     87  
     88 
     89     NSLog(@"列表选择");
     90 
     91  //弹出选择列表
     92 
     93     OptionTableView *optionView = [[OptionTableView alloc]initWithFrame:CGRectMake(buildingOptionView.left + 20,buildingOptionView.bottom + 10,150,300) style:UITableViewStylePlain];
     94 
     95     optionView.buildingsArray = @[@"第一教学楼", @"第二教学楼", @"第三教学楼", @"第四教学楼", @"第五教学楼", @"第六教学楼", @"第七教学楼", @"第八教学楼"];
     96 
     97     [self.view addSubview:optionView];
     98 
     99     
    100 
    101     //block的实现,给label赋值
    102 
    103     [optionView setDismissOnBuilding:^(NSString *selectedBuilding) {
    104 
    105         
    106 
    107         optionLabel.text = selectedBuilding;
    108 
    109         
    110 
    111     }];
    112 
    113 }

    OptionTableView的实现代码如下:

    1 #import <UIKit/UIKit.h>
    2 
    3 @interface OptionTableView : UITableView<UITableViewDataSource,UITableViewDelegate>
    4 
    5 @property (nonatomic, strong) NSArray *buildingsArray;
    6 @property (nonatomic, copy) void (^dismissOnBuilding)(NSString *building);
    7 
    8 
    9 @end
     1 static NSString *const buildingOptionCellId = @"Cell";
     2 
     3 
     4 @interface OptionTableView ()
     5 
     6 
     7 @end
     8 @implementation OptionTableView
     9 
    10 
    11 - (id)initWithFrame:(CGRect)frame style:(UITableViewStyle)style{
    12     
    13     self = [super initWithFrame:frame style:style];
    14     if (self) {
    15         
    16         self.dataSource = self;
    17         self.delegate = self;
    18         
    19         
    20         [self registerClass:[UITableViewCell class] forCellReuseIdentifier:buildingOptionCellId];
    21         self.backgroundColor = [UIColor blueColor];
    22         
    23     }
    24     return self;
    25     
    26 }
    27 
    28 #pragma mark - Table view dataSource
    29 
    30 
    31 //行数
    32 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
    33 {
    34     
    35     return self.buildingsArray.count;
    36     
    37 }
    38 
    39 
    40 //创建单元格
    41 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
    42 
    43 {
    44     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:buildingOptionCellId forIndexPath:indexPath];
    45     cell.textLabel.text = self.buildingsArray[indexPath.row];
    46     return cell;
    47 
    48 }
    49 
    50 #pragma mark - Table view delegate
    51 
    52 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    53     
    54     //block实现选中的值的传递
    55     
    56     if (self.dismissOnBuilding) {
    57         self.dismissOnBuilding(self.buildingsArray[indexPath.row]);
    58     }
    59     
    60     //当选择完毕表视图收起
    61     self.frame = CGRectZero;
    62 }

    写的不好,有更好的方法,欢迎大家告诉我,谢谢!!!

  • 相关阅读:
    Common Words
    The end of other
    避免ssh断开导致运行命令的终止:screen
    Check iO:初学Python
    linux环境c++开发:ubuntu12.04使用llvm3.4.2
    boost库使用:仿SGI-STL实现的一个树节点allocator
    boost库使用:vs2013下boost::container::vector编译出错解决
    读论文系列:Nearest Keyword Search in XML Documents中使用的数据结构(CT、ECT)
    房产律师咨询
    E文阅读
  • 原文地址:https://www.cnblogs.com/pengsi/p/5332197.html
Copyright © 2011-2022 走看看