亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

下拉框選擇效果的實現原理

2019-11-14 18:33:56
字體:
來源:轉載
供稿:網友

導航欄與下拉框的效果

實現的效果是在導航欄中間出現下拉框選擇的效果,當選擇某一個時,則上面的字也相應進行修改(此實例代碼可以看Coding.net的源代碼),這邊有把它單獨提取出來進行測試,源代碼下載;接下來將簡單介紹一下此實現的方式及主要代碼;

1:因為我們是跟導航欄進行結合,所以這邊用到的NavigationController,我們把這個頁面的效果放在viewController中,彈出來的下拉列表這邊是以表格的形式存在,每個則是表格的一行,行里面包括圖標跟文字;

首先看一下AppDelegate.m的代碼:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];    // Override point for customization after application launch.    self.window.backgroundColor = [UIColor whiteColor];    ViewController *loginVC = [[ViewController alloc] init];    [self.window setRootViewController:[[UINavigationController alloc] initWithRootViewController:loginVC]];    [self.window makeKeyAndVisible];    return YES;}

接著是ViewController.h及ViewController.m的代碼:

#import <UIKit/UIKit.h>#import "UIViewController+DownMenu.h"@interface ViewController : UIViewController@end
#import "ViewController.h"@interface ViewController ()@PRoperty (nonatomic, assign) NSInteger curIndex;@end@implementation ViewController- (void)viewDidLoad {    [super viewDidLoad];    _curIndex = 0;    [self customDownMenuWithTitles:@[[DownMenuTitle title:@"冒泡廣場" image:@"nav_tweet_all" badge:nil],                                     [DownMenuTitle title:@"好友圈" image:@"nav_tweet_friend" badge:nil],                                     [DownMenuTitle title:@"熱門冒泡" image:@"nav_tweet_hot" badge:nil],                                     [DownMenuTitle title:@"我的冒泡" image:@"nav_tweet_mine" badge:nil]]                   andDefaultIndex:_curIndex                          andBlock:^(id titleObj, NSInteger index) {                              [(DownMenuTitle *)titleObj setBadgeValue:nil];                              _curIndex = index;                              [self refreshFirst];                          }];}- (void)didReceiveMemoryWarning {    [super didReceiveMemoryWarning];    // Dispose of any resources that can be recreated.}-(void)refreshFirst{    NSLog(@"%ld",_curIndex);}@end

這邊把一些內容封裝到的UIViewController+DownMenu.h這個文件及實現里;

2:UIViewController+DownMenu主要代碼如下:

#import <UIKit/UIKit.h>#import "UIDownMenuButton.h"@class DownMenuTitle;@interface UIViewController (DownMenu)- (UIDownMenuButton *)customDownMenuWithTitles:(NSArray *)titleList andDefaultIndex:(NSInteger)index andBlock:(void (^)(id titleObj, NSInteger index))block;- (UIDownMenuButton *)downMenuBtn;@end
#import "UIViewController+DownMenu.h"@implementation UIViewController (DownMenu)- (UIDownMenuButton *)customDownMenuWithTitles:(NSArray *)titleList andDefaultIndex:(NSInteger)index andBlock:(void (^)(id titleObj, NSInteger index))block{    UIDownMenuButton *navBtn = [[UIDownMenuButton alloc] initWithTitles:titleList andDefaultIndex:index andVC:self];    navBtn.menuIndexChanged = block;    self.navigationItem.titleView = navBtn;    return navBtn;}- (UIDownMenuButton *)downMenuBtn{    if (self.navigationItem.titleView || [self.navigationItem.titleView isKindOfClass:[UIDownMenuButton class]]) {        UIDownMenuButton *navBtn = (UIDownMenuButton *)self.navigationItem.titleView;        return navBtn;    }else{        return nil;    }}@end

注意:UIDownMenuButton這個就是上面每個行的封裝,這邊可以看到在其對它進行增加到nav里面;

3:UIDownMenuButton主要代碼如下:

#import <UIKit/UIKit.h>#import "NSString+Common.h"@class DownMenuTitle;@interface UIDownMenuButton : UIButton <UITableViewDataSource, UITableViewDelegate>@property (nonatomic, assign) NSInteger curIndex;- (UIDownMenuButton *)initWithTitles:(NSArray *)titleList andDefaultIndex:(NSInteger)index andVC:(UIViewController *)viewcontroller;@property (nonatomic,copy) void(^menuIndexChanged)(id titleObj, NSInteger index);@end@interface DownMenuTitle : NSObject@property (nonatomic, strong) NSString *titleValue, *imageName, *badgeValue;+ (DownMenuTitle *)title:(NSString *)title image:(NSString *)image badge:(NSString *)badge;@end
#define kNavImageWidth (15.0+5.0)#define kDownMenu_ContentLeftPading 27.0#define kDownMenuCellHeight 50.0#define  kNavTitleFontSize 19#define kScreen_Bounds [UIScreen mainScreen].bounds#define kScreen_Height [UIScreen mainScreen].bounds.size.height#define kScreen_Width [UIScreen mainScreen].bounds.size.width#define kKeyWindow [UIApplication sharedApplication].keyWindow#define DEGREES_TO_RADIANS(angle) ((angle)/180.0 *M_PI)#define RADIANS_TO_DEGREES(radians) ((radians)*(180.0/M_PI))#import "UIDownMenuButton.h"#import "DownMenuCell.h"@interface UIDownMenuButton()@property (nonatomic, strong) NSArray *titleList;@property (nonatomic, assign) BOOL isShowing;@property (nonatomic, strong) UIView *mySuperView, *myTapBackgroundView;@property (nonatomic, strong) UITableView *myTableView;@end@implementation UIDownMenuButton- (UIDownMenuButton *)initWithTitles:(NSArray *)titleList andDefaultIndex:(NSInteger)index andVC:(UIViewController *)viewcontroller{    self = [super init];    if (self) {        _titleList = titleList;        _curIndex = index;        _isShowing = NO;        _mySuperView = viewcontroller.view;               self.backgroundColor = [UIColor clearColor];        [self setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];        [self setTitleColor:[UIColor blackColor] forState:UIControlStateHighlighted];        [self.titleLabel setFont:[UIFont systemFontOfSize:kNavTitleFontSize]];        [self.titleLabel setMinimumScaleFactor:0.5];        [self addTarget:self action:@selector(changeShowing) forControlEvents:UIControlEventTouchUpInside];        [self refreshSelfUI];    }    return self;}- (void)refreshSelfUI{    NSString *titleStr = @"";    DownMenuTitle *menuObj = [self.titleList objectAtIndex:self.curIndex];    titleStr = menuObj.titleValue;    CGFloat titleWidth = [titleStr getWidthWithFont:self.titleLabel.font constrainedToSize:CGSizeMake(kScreen_Width, 30)];    CGFloat btnWidth = titleWidth +kNavImageWidth;    self.frame = CGRectMake((kScreen_Width-btnWidth)/2, (44-30)/2, btnWidth, 30);    self.titleEdgeInsets = UIEdgeInsetsMake(0, -kNavImageWidth, 0, kNavImageWidth);    self.imageEdgeInsets = UIEdgeInsetsMake(0, titleWidth, 0, -titleWidth);    [self setTitle:titleStr forState:UIControlStateNormal];    [self setImage:[UIImage imageNamed:@"nav_arrow_down"] forState:UIControlStateNormal];}- (void)changeShowing{    [kKeyWindow endEditing:YES];        if (!self.myTableView) {        //定義其顯示的位置        self.myTableView = [[UITableView alloc] initWithFrame:CGRectMake(0,64, kScreen_Width, 0) style:UITableViewStylePlain];        [self.myTableView registerClass:[DownMenuCell class] forCellReuseIdentifier:kCellIdentifier_DownMenu];        self.myTableView.separatorStyle = UITableViewCellSeparatorStyleNone;        self.myTableView.dataSource = self;        self.myTableView.delegate = self;        self.myTableView.alpha = 0;        self.myTableView.scrollEnabled = NO;    }    if (!self.myTapBackgroundView) {        self.myTapBackgroundView = [[UIView alloc] initWithFrame:kScreen_Bounds];        self.myTapBackgroundView.backgroundColor = [UIColor clearColor];        UITapGestureRecognizer *bgTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(changeShowing)];        [self.myTapBackgroundView addGestureRecognizer:bgTap];    }        if (self.isShowing) {//隱藏        CGRect frame = self.myTableView.frame;        frame.size.height = 0;        self.enabled = NO;        [UIView animateWithDuration:0.3 animations:^{            [self refreshSelfUI];            self.myTapBackgroundView.backgroundColor = [UIColor colorWithWhite:0 alpha:0];            self.myTableView.alpha = 0;            self.myTableView.frame = frame;            self.imageView.transform = CGAffineTransformRotate(self.imageView.transform, DEGREES_TO_RADIANS(180));        } completion:^(BOOL finished) {            [self.myTableView removeFromSuperview];            [self.myTapBackgroundView removeFromSuperview];            self.enabled = YES;            self.isShowing = !self.isShowing;        }];    }else{//顯示        [[UIApplication sharedApplication].keyWindow addSubview:self.myTapBackgroundView];        [[UIApplication sharedApplication].keyWindow addSubview:self.myTableView];        [self.myTableView reloadData];        CGRect frame = self.myTableView.frame;        frame.size.height = kDownMenuCellHeight *[self.titleList count];        self.enabled = NO;        [UIView animateWithDuration:0.3 animations:^{            self.myTapBackgroundView.backgroundColor = [UIColor colorWithWhite:0 alpha:0.2];            self.myTableView.alpha = 1.0;            self.myTableView.frame = frame;            self.imageView.transform = CGAffineTransformRotate(self.imageView.transform, DEGREES_TO_RADIANS(180));        } completion:^(BOOL finished) {            self.enabled = YES;            self.isShowing = YES;        }];    }}#pragma mark Table M- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{    return [self.titleList count];}- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{    DownMenuCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellIdentifier_DownMenu forIndexPath:indexPath];    DownMenuTitle *curItem =[self.titleList objectAtIndex:indexPath.row];    cell.curItem = curItem;    cell.backgroundColor = (indexPath.row == self.curIndex)? [UIColor colorWithHexString:@"0xf3f3f3"] : [UIColor whiteColor];    return cell;}- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{    return kDownMenuCellHeight;}- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{    [tableView deselectRowAtIndexPath:indexPath animated:YES];    self.curIndex = indexPath.row;    [self changeShowing];    if (self.menuIndexChanged) {        self.menuIndexChanged([self.titleList objectAtIndex:_curIndex], _curIndex);    }}- (void)setCurIndex:(NSInteger)curIndex{    _curIndex = curIndex;    [UIView animateWithDuration:0.3 animations:^{        [self refreshSelfUI];//        [self.myTableView reloadData];//        [self.myTableView performSelector:@selector(reloadData) withObject:nil afterDelay:0.3];    }];}- (void)dealloc{    self.myTableView.delegate = nil;}@end@implementation DownMenuTitle+ (DownMenuTitle *)title:(NSString *)title image:(NSString *)image badge:(NSString *)badge{    DownMenuTitle *menuObj = [[DownMenuTitle alloc] init];    menuObj.titleValue = title;    menuObj.badgeValue = badge;    menuObj.imageName = image;    return menuObj;}@end

其中refreshSelfUI這個方法里面是實現的選擇時,對應文字跟箭頭圖標的變化;重點的內容在changeShowing這個方法,它有定義列表要顯示的位置,列表的創建初始化,及背景模態的出現,顯示及隱藏的內容,視圖的創建及刪除;最后一個是實體的賦值;

4:表格單元行的布局DownMenuCell,主要代碼如下:

#define kCellIdentifier_DownMenu @"DownMenuCell"#import <UIKit/UIKit.h>#import "UIDownMenuButton.h"#import "UIColor+expanded.h"@interface DownMenuCell : UITableViewCell@property (strong, nonatomic) DownMenuTitle *curItem;@end
#import "DownMenuCell.h"@implementation DownMenuCell- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];    if (self) {        // Initialization code    }    return self;}- (void)awakeFromNib{    // Initialization code}- (void)setSelected:(BOOL)selected animated:(BOOL)animated{    [super setSelected:selected animated:animated];    // Configure the view for the selected state}- (void)layoutSubviews{    [super layoutSubviews];    if (!_curItem) {        return;    }    self.imageView.frame = CGRectMake(27, (50.0-25.0)/2, 25, 25);    self.textLabel.frame = CGRectMake(65, (50.0-25.0)/2, 150, 25);    self.textLabel.backgroundColor = [UIColor clearColor];    self.textLabel.textColor = [UIColor blackColor];    self.textLabel.font = [UIFont systemFontOfSize:15];        self.imageView.image = [UIImage imageNamed:_curItem.imageName];    self.textLabel.text = _curItem.titleValue;;}@end

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美亚洲视频一区二区| 亚洲免费一在线| 欧美高清在线视频观看不卡| 伊人成人开心激情综合网| 日韩亚洲欧美中文在线| 久久这里只有精品99| 91av在线视频观看| 久久深夜福利免费观看| 疯狂做受xxxx高潮欧美日本| 国模gogo一区二区大胆私拍| 国产免费观看久久黄| 欧美日韩高清在线观看| 精品欧美aⅴ在线网站| 亚洲国产精品久久久久| 中文字幕欧美视频在线| 久久久久久久久久久国产| 日韩在线观看网址| 性欧美xxxx视频在线观看| 这里精品视频免费| 黑人巨大精品欧美一区二区| 91视频免费网站| 亚洲精品suv精品一区二区| 欧美怡红院视频一区二区三区| 久久久999国产| 精品亚洲国产视频| 91产国在线观看动作片喷水| 91精品国产91久久久久久最新| 国产精品专区一| 日韩av免费在线看| 国产成人一区二区三区| 97精品伊人久久久大香线蕉| 国产一区二中文字幕在线看| 久久久av免费| 97在线视频免费看| 国产suv精品一区二区三区88区| 国产精品成人一区| 国产精品一区二区久久国产| 日韩中文字幕视频在线观看| 狠狠躁夜夜躁久久躁别揉| 成人久久久久久久| 亚洲香蕉av在线一区二区三区| 国产99视频精品免视看7| 91影视免费在线观看| 国产日本欧美一区| 日韩欧美中文免费| 欧美亚洲另类在线| 91精品国产自产在线观看永久| 久久电影一区二区| 中文字幕日韩高清| 亚洲一区二区三区四区在线播放| 国产欧美在线视频| 亚洲精品电影网在线观看| 蜜月aⅴ免费一区二区三区| 亚洲jizzjizz日本少妇| 国产999精品视频| 国产精品户外野外| 日韩美女毛茸茸| 亚洲女人天堂网| 宅男66日本亚洲欧美视频| 精品中文字幕视频| 欧美有码在线观看| 色伦专区97中文字幕| 午夜精品在线视频| 亚洲人线精品午夜| 久久久免费高清电视剧观看| 日韩免费中文字幕| 日韩在线视频国产| 美日韩精品视频免费看| 欧美国产极速在线| 人人澡人人澡人人看欧美| 久久av红桃一区二区小说| 国产视频自拍一区| 在线日韩精品视频| 精品亚洲精品福利线在观看| 欧美日韩国产丝袜美女| 人体精品一二三区| 91欧美精品成人综合在线观看| 欧美中文字幕第一页| 久久久久国色av免费观看性色| 全亚洲最色的网站在线观看| 欧美日韩国产精品专区| 精品视频在线观看日韩| 欧洲日本亚洲国产区| 日韩精品视频在线| 91久久精品国产91久久| 91久久精品国产91久久性色| 亚洲第一区中文99精品| 日韩中文字幕免费| 国产日韩欧美中文在线播放| 精品国产区一区二区三区在线观看| 97视频在线观看视频免费视频| 亚洲人成网7777777国产| 日韩免费电影在线观看| 91最新国产视频| 精品久久久香蕉免费精品视频| 91地址最新发布| 国产精品青草久久久久福利99| 欧美黑人国产人伦爽爽爽| 亚洲高清一二三区| 欧美夫妻性生活视频| 91亚洲国产成人久久精品网站| 在线观看91久久久久久| 国产伊人精品在线| 国产一区二区三区日韩欧美| 亚洲自拍偷拍色片视频| 91国产视频在线| 久久99精品久久久久久噜噜| 亚洲欧美日韩在线一区| 欧美电影院免费观看| 亚洲精品免费在线视频| 国产日韩在线视频| 亚洲国产日韩欧美在线动漫| 51精品国产黑色丝袜高跟鞋| 黑人与娇小精品av专区| 国产精品91视频| 亚洲一区二区三区视频| 欧美国产日韩视频| 成人精品一区二区三区电影免费| 亚洲视频自拍偷拍| 精品久久久久国产| 日韩欧美在线第一页| 欧美日韩亚洲网| 91在线无精精品一区二区| 在线精品国产成人综合| 国产精品视频精品| 欧美—级高清免费播放| 欧美亚洲视频在线看网址| 国产精品扒开腿做爽爽爽视频| 欧美激情2020午夜免费观看| 久久久久久av| 亚洲视频在线播放| 欧美成人一二三| 一本一本久久a久久精品综合小说| 精品久久久久久久久久久久久久| 国产欧美最新羞羞视频在线观看| 亚洲一区二区免费| 狠狠色狠狠色综合日日小说| 日本国产高清不卡| 久久久国产影院| 亚洲视频在线观看视频| 久久久人成影片一区二区三区观看| 91chinesevideo永久地址| 精品久久久久久久久中文字幕| 最近更新的2019中文字幕| 久久久精品国产网站| 日韩中文字幕免费视频| 好吊成人免视频| 在线日韩中文字幕| 成年人精品视频| 色噜噜久久综合伊人一本| 欧美孕妇孕交黑巨大网站| 日韩精品日韩在线观看| 亚洲自拍偷拍一区| 91综合免费在线| 国产日韩欧美日韩大片| 2019av中文字幕| 久久成人综合视频| 日韩在线欧美在线国产在线| 国产精品吹潮在线观看| 中文字幕亚洲字幕| 国产xxx69麻豆国语对白| 日韩在线观看免费av| 日韩一区二区三区xxxx| 色777狠狠综合秋免鲁丝|