`

[IOS]下拉栏实现

    博客分类:
  • IOS
阅读更多

一.思路:

1.使用UITableViewController来展示数据

2.通过delegate来传递数据

3.在所在页面加载UITableViewController添加UITableViewController.view

 

二.实现:

1. UITableViewController:

DropDownMenuTableViewController.h:

 

#import <UIKit/UIKit.h>

@protocol DropDownMenuDelegate <NSObject>
/**
 * 选中cell的代理事件
 */
- (void) selectedCell:(NSInteger)index;

/**
 *  更新下拉菜单的高度
 */
//- (void) updateListH;

@end


@interface DropDownMenuTableViewController : UITableViewController

@property (nonatomic) BOOL isOpen;

@property (nonatomic) NSArray *dataSource;

@property (nonatomic,weak) id<DropDownMenuDelegate>dropDownMenuDelegate;

@end

 

 

DropDownMenuTableViewController.m:

 

#import "DropDownMenuTableViewController.h"

@interface DropDownMenuTableViewController ()

@end

@implementation DropDownMenuTableViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    // 背景透明
    self.view.backgroundColor = [UIColor whiteColor];
    // 清除多余的分割线
    [self.tableView setTableFooterView:[[UIView alloc]initWithFrame:CGRectZero]];
    [self.tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];
    // 默认关闭下拉列表
    _isOpen = NO;
    
}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    
    // 展开与隐藏账号列表
    if(_isOpen)
        return _dataSource.count;
    else
        return 0;
    
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSString *specialId = @"id";
    UITableViewCell *cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:specialId];
    // 添加数据源
    cell.textLabel.text = [_dataSource objectAtIndex:indexPath.row];
    cell.textLabel.textAlignment = NSTextAlignmentCenter;
    return cell;
}

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    //通知代理
    [_dropDownMenuDelegate selectedCell:indexPath.row];
    
    
}


@end

 

 

2.ViewController:

@interface MainViewController ()<GridTableDelegate>

 

@property (strong, nonatomic) IBOutlet UITextField *encryption_text;

 

@property (nonatomic) NSArray *encryption_dataSource;
@property (nonatomic) DropDownMenuTableViewController *encrypt_dropDownMenuTable;

 自己准备数据源

 

 

手动初始化下拉栏view:

 

-(void)initView{
    
    //set text field not editable
    _encryption_text.enabled = false;
    
    _encrypt_dropDownMenuTable = [[DropDownMenuTableViewController alloc]init];
    // 设置弹出菜单的代理为当前这个类
    _encrypt_dropDownMenuTable.dropDownMenuDelegate = self;
    
    // 数据传给下拉列表类,作为表格的数据源
    _encrypt_dropDownMenuTable.dataSource = _encryption_dataSource;
    
    // 将下拉列表作为子页面添加到当前视图,同时添加子控制器
    [self addChildViewController:_encrypt_dropDownMenuTable];
    
    // 根据显示框尺寸设置弹出菜单的位置和尺寸
    CGFloat encryptTv_x      = _encryption_text.frame.origin.x;
    CGFloat encryptTv_y      = _encryption_text.frame.origin.y;
    CGFloat encryptTv_width  = _encryption_text.frame.size.width;
    CGFloat encryptTv_height = _encryption_text.frame.size.height;
    
    _encrypt_dropDownMenuTable.view.frame = CGRectMake(encryptTv_x, encryptTv_y + encryptTv_height, encryptTv_width, 0.15*screen_height);
    
}

 

点击按钮后弹出下拉框:

- (IBAction)encryptDropDownMenuBtnClicked:(UIButton *)sender {
    NSLog(@"encrypt drop down menu isOpen:%d",_encrypt_dropDownMenuTable.isOpen);
    if (_encrypt_dropDownMenuTable.isOpen) {
        [_encrypt_dropDownMenuTable.view removeFromSuperview];
    }else{
        [_pop_view addSubview:_encrypt_dropDownMenuTable.view];
        [_channel_dropDownMenuTable.view removeFromSuperview];
    }
    _encrypt_dropDownMenuTable.isOpen = !_encrypt_dropDownMenuTable.isOpen;
    [_encrypt_dropDownMenuTable.tableView reloadData];
    //处理滚动条
    [_encrypt_dropDownMenuTable.tableView performSelector:@selector(flashScrollIndicators) withObject:nil afterDelay:0];
}

 *注意要remove掉tableview的view,因为即使counts变为0,也会遮挡了下面的控件;

 

设置table点击事件:

/**
 * 选定cell获取选中账号的代理监听
 */
- (void)selectedCell:(NSInteger)index {
    // 更新当前选中账号
    _encryption_text.text = [_encryption_dataSource objectAtIndex:index];
    
    //close table view
    _encrypt_dropDownMenuTable.isOpen = NO;
    [_encrypt_dropDownMenuTable.tableView reloadData];
    [_encrypt_dropDownMenuTable.view removeFromSuperview];
    
}

 

 

参考:

1.http://blog.csdn.net/cordova/article/details/51607142

分享到:
评论

相关推荐

    仿Ios下拉菜单

    仿iOS下拉菜单通常会使用系统提供的`UITableView`或`UICollectionView`来实现,这两个控件可以轻松地展示列表数据,并支持用户交互。同时,为了实现美团风格的下拉效果,我们需要自定义视图控制器和cell,以达到滑动...

    ios导航栏 下拉列表

    标题“ios导航栏 下拉列表”指的是在iOS应用的导航栏右侧的barbuttonitem上实现点击后弹出下拉列表的功能。这个功能通常通过自定义视图或者第三方库来实现。 描述中提到的“ios在导航栏的barbuttonitem 点击 出现...

    ios 上滑隐藏导航下拉显示导航栏实现

    在iOS应用开发中,"上滑隐藏导航下拉显示导航栏"是一种常见的交互设计,它增强了用户体验,使得用户可以更自然地浏览内容。这种效果在个人主页或新闻列表等场景中尤为常见,其中头部的图片通常会随着用户的下拉手势...

    jQuery ios下拉通知 jQuery ios下拉通知网页特效.zip

    "jQuery ios下拉通知" 是一种针对iOS设备优化的网页特效,它模拟了iOS系统的下拉通知栏,为用户提供了类似的交互体验。这个压缩包包含了一个实现这种效果的资源集合,主要涉及前端技术,包括CSS、JavaScript、jQuery...

    ios 导航栏上滑隐藏下拉显示

    在iOS应用开发中,"导航栏上滑隐藏下拉显示"是一种常见的交互设计,它提升了用户体验,尤其是在个人主页或其他信息量较大的页面中。这个功能使得用户可以通过手势操作,即上滑手势来隐藏导航栏,而下拉则可以让导航...

    IOS下拉刷新,上拉加载更多

    总结一下,要在iOS应用中实现下拉刷新和上拉加载更多功能,你需要熟悉UITableView的DataSource和Delegate协议,以及UIRefreshControl的使用。同时,还需要掌握如何监听和处理UITableView的滚动事件,以便在用户接近...

    iOS导航下拉菜单

    在iOS应用开发中,导航下拉菜单是一种常见的交互设计,用于提供多级导航或筛选功能。...然而,理解并实现自己的下拉菜单可以帮助我们更好地掌握iOS UI开发,并有可能创建出更符合项目需求的定制化解决方案。

    iOS 下拉菜单

    本文将深入探讨如何在iOS应用中实现一个简单的下拉菜单,主要关注`LXHPopView`这个库。 `LXHPopView`是一个第三方组件,它提供了创建自定义下拉菜单的功能,适用于Swift或Objective-C项目。这个库的优点在于它的...

    IOS 自定义标签栏

    本篇文章将深入探讨如何在iOS应用中实现自定义标签栏,以增强用户界面的个性化与交互体验。 首先,我们了解下iOS系统内置的UITabBarController。它是苹果官方提供的用于管理多个ViewController的容器,其底部通常会...

    ios-导航条自定义下拉菜单.zip

    本资源"ios-导航条自定义下拉菜单.zip"提供了一个名为ThirdMenuDemo的示例项目,帮助开发者学习如何在导航条上创建和实现自定义的下拉菜单。 首先,自定义导航条下拉菜单的核心在于利用...

    ios-下拉九宫格样式菜单.zip

    本项目"ios-下拉九宫格样式菜单.zip"就是一个专门实现这种效果的开源库,名为MoreDropDownMenu,它是对DOPDropDownMenu-Enhanced的进一步改进。这个库为应用添加了一个具有九宫格布局的下拉菜单,可以方便地展示多个...

    DropDownMenu, iOS下拉菜单,也可以实现类似NSComboBox的效果.zip

    在iOS开发中,为了提供用户友好的交互体验,有时我们需要实现类似于桌面操作系统中的下拉菜单功能,例如OS X系统中的NSComboBox。`DropDownMenu`是一个开源项目,它为iOS平台提供了这种功能,允许开发者轻松创建出...

    IOS 自定义导航栏 和表格 学习笔记

    这篇学习笔记将深入探讨如何在iOS应用中实现自定义导航栏以及如何有效利用表格展示数据。 首先,自定义导航栏允许开发者根据应用程序的品牌风格或功能需求进行个性化设计。在iOS中,我们通常使用...

    iOS 导航栏源代码

    本资源“iOS 导航栏源代码”提供了一个具体的导航栏实现的源程序代码,这对于理解导航栏的工作原理以及自定义导航栏样式具有重要价值。我们将深入探讨导航栏的基本概念、工作方式以及如何通过源代码进行定制。 1. *...

    2015 iOS TableView上拉加载下拉刷新

    本教程将深入探讨如何在2015年的iOS项目中实现TableView的上拉加载和下拉刷新功能,这对于任何iOS开发者来说都是必备技能,尤其适合初学者。 一、下拉刷新(Pull-to-Refresh) 下拉刷新是一种常见的用户界面设计,...

    ios-导航栏由透明渐变颜色(仿京东).zip

    本示例“ios-导航栏由透明渐变颜色(仿京东)”着重讲解如何实现导航栏从透明到带有颜色的渐变效果,以及在页面刷新时导航栏消失的效果,这通常用于提供更沉浸式的用户体验,比如京东App中的特定场景。 首先,我们...

    ios-自定义tableview,实现下拉放大表图图片,上滑显示导航栏,CPKenburnsView实现表图动画效果,点击照片放大,只是业余做的demo,做的不好请大家多多指教.zip

    这个压缩包文件中的项目,"ios-自定义tableview",旨在实现一个特定的交互设计,即下拉时放大表头图片,上滑时显示导航栏,并通过CPKenburnsView实现图片的动态缩放动画。此外,用户点击照片后,图片会进一步放大...

    ios-滑动改变导航栏状态.zip

    本项目“ios-滑动改变导航栏状态.zip”主要展示了如何通过用户滑动屏幕来动态改变导航栏的状态,比如在下拉时放大导航栏中的图片,提供更丰富的交互体验。这个功能常见于新闻阅读、社交媒体等类型的App中,增加用户...

    ios-点击导航栏弹窗.zip

    在iOS开发中,导航栏(NavigationBar)是应用界面中常见的一种元素,主要用于展示当前页面的标题以及提供返回、更多等操作。"ios-点击导航栏弹窗.zip"这个压缩包内容可能是一个示例项目,展示了如何在用户点击导航栏...

    下拉菜单视图

    NIDropDown可能代表“Native iOS Dropdown”或者“Nice Interface Dropdown”,暗示这是一个针对iOS平台或者注重界面设计的下拉菜单解决方案。在实际开发中,开发者可能会使用如SwiftUI、UIKit或者第三方库如...

Global site tag (gtag.js) - Google Analytics