博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ios中MKHorizMenu用法
阅读量:5988 次
发布时间:2019-06-20

本文共 15710 字,大约阅读时间需要 52 分钟。

下载地址  https://github.com/MugunthKumar/MKHorizMenuDemo 直接 加入MKHorizMenu目录即可  下载包地址 http://pan.baidu.com/share/link?shareid=2872269045&uk=923776187 ////  MyViewController.m//  MyTest////  Created by zy on 13-8-1.//  Copyright (c) 2013年 zy. All rights reserved.//#import "MyViewController.h"#import "JSContentView.h"@interface MyViewController (){    JSContentView *newView;    UIView *contentview;}@property(nonatomic,retain)NSArray *mydata;//缓存view@property(nonatomic,retain)NSMutableDictionary *cacheDic;@end@implementation MyViewController- (void)viewDidLoad{    [super viewDidLoad];    self.cacheDic=[NSMutableDictionary dictionary];    self.view.backgroundColor=[UIColor whiteColor];    self.mydata=@[@"语文",@"数学",@"英语"];    MKHorizMenu *Menu=[[MKHorizMenu alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, 80)];    Menu.dataSource=self;    Menu.itemSelectedDelegate=self;        contentview=[[UIView alloc] initWithFrame:CGRectMake(0,90, 320, 300)];//内容view,        [self.view addSubview:contentview];    [contentview release];        [self.view addSubview:Menu];    [self  horizMenu:Menu itemSelectedAtIndex:0];//默认是第一个选中    [Menu reloadData];    [Menu release];}#pragma mark -MKHorizMenu DataSource- (UIColor*) backgroundColorForMenu:(MKHorizMenu*) tabView{    return [UIColor purpleColor];}- (int) numberOfItemsForMenu:(MKHorizMenu*) tabView{     return 3;}- (NSString*) horizMenu:(MKHorizMenu*) horizMenu titleForItemAtIndex:(NSUInteger) index{        return  self.mydata[index];}#pragma mark -MK Delegate- (void)horizMenu:(MKHorizMenu*) horizMenu itemSelectedAtIndex:(NSUInteger) index{      for (UIView *child in contentview.subviews) {
//先移除所有的view. [child removeFromSuperview]; } NSString *tempstr=self.mydata[index]; if(![self.cacheDic objectForKey:tempstr]){ switch (index) { case 0: { newView=[[JSContentView alloc] initWithFrame:contentview.bounds requestSEL:@selector(Requestdeta) aDelegate:self]; [contentview addSubview:newView]; [self.cacheDic setObject:newView forKey:tempstr];//放入缓存中 [newView release]; } break; case 1: { UIView *view=[[UIView alloc] initWithFrame:contentview.bounds]; view.backgroundColor=[UIColor redColor]; [contentview addSubview:view]; [self.cacheDic setObject:view forKey:tempstr]; [view release]; } break; case 2: { UIView *view=[[UIView alloc] initWithFrame:contentview.bounds]; view.backgroundColor=[UIColor yellowColor]; [contentview addSubview:view]; [self.cacheDic setObject:view forKey:tempstr]; [view release]; } break; default: break; } } else{ UIView *view=[self.cacheDic objectForKey:tempstr]; [contentview addSubview:view]; } }-(void)Requestdeta{ NSString *url=[NSString stringWithFormat:@"http://61.177.61.252/szzssw/taxCommon.action?code=1001&pagecode=%zi&menucode=3300000000",newView.Pagecode==0?1:newView.Pagecode]; //请求数据,重新刷新数据 [[JSNetWord ShareNetwork] NetWorkWithConnctId:100 body:url PostBody:nil aDelegate:self]; //先从缓存中读取 NSString *cache=[self readApiCacheFileName:@"1.txt"]; if (cache.length>0 &&newView.Pagecode==1) { [self NetWorkWithConnectId:100 aBackString:cache withState:0]; }}-(void)NetWorkWithConnectId:(int)connectid aBackString:(NSString *)backString withState:(int)state{ if(connectid==100){ if (newView.Pagecode<=1 && state==1) {
//是下拉 newView.tableview.pullTableIsRefreshing=NO; } if (newView.Pagecode>1) {
//上拉 newView.tableview.pullTableIsLoadingMore=NO; } if (newView.Pagecode==1) {
//下拉 保存数据 [self saveApiCacheFileName:@"1.txt" textContent:backString Append:NO]; } NSDictionary *arr= [backString JSONValue]; if (newView.Pagecode==1 &&newView.mydata.count>0) { [newView.mydata removeAllObjects];//下拉 只显示20 ,上拉 累加 } [newView.mydata addObjectsFromArray:arr[@"content"]]; [newView.tableview reloadData]; }}- (void)dealloc{ [_mydata release]; [_cacheDic release]; [super dealloc];}- (void)didReceiveMemoryWarning{ [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.}@end

第一种方式   修改 MKHorizMenu.m文件

-(void) reloadData{   NSArray *viewsToRemove = [self subviews];    for (UIView *v in viewsToRemove) {        [v removeFromSuperview];    }    self.itemCount = [dataSource numberOfItemsForMenu:self];//调用代理的方法               float btnWidth =  self.bounds.size.width / self.itemCount;//得到宽度                        int tag = kButtonBaseTag;                        self.backgroundColor = [dataSource backgroundColorForMenu:self];            //    self.selectedImage = [dataSource selectedItemImageForMenu:self]; 去掉代理这个方法                        CGRect imgRec,btnRec,hRec;            CGRectDivide(self.bounds, &imgRec, &btnRec, 2, CGRectMaxYEdge);                        for(int i = 0 ; i < self.itemCount; i ++)//进行遍历            {                CGRectDivide(btnRec, &hRec, &btnRec, btnWidth, CGRectMinXEdge);                NSString *title = [dataSource horizMenu:self titleForItemAtIndex:i];                UIButton *menuBtn = [UIButton ButtonWithImageName:nil hImageName:nil frame:CGRectZero title:title titleColor:[UIColor blackColor]                                                             font:[UIFont boldSystemFontOfSize:15] target:self action:@selector(buttonTapped:)];                //        [menuBtn setBackgroundImage:self.selectedImage forState:UIControlStateSelected];                [menuBtn setTitleColor:rgb(109, 209, 62) forState:UIControlStateSelected];                                menuBtn.tag = tag++;                [self addSubview:menuBtn];                 if (i == 0) {
//按钮之间保持2个间距 hRec = UIEdgeInsetsInsetRect(hRec, UIEdgeInsetsMake(0, 0, 0, 1)); }else if (i == self.itemCount-1){ hRec = UIEdgeInsetsInsetRect(hRec, UIEdgeInsetsMake(0, 1, 0, 0)); }else{ hRec = UIEdgeInsetsInsetRect(hRec, UIEdgeInsetsMake(0, 1, 0, 1)); } menuBtn.frame = hRec; if (i != 0 && i != self.itemCount) {
//在每个按钮加 “|” hRec = CGRectMake(hRec.origin.x, hRec.origin.y,2 , hRec.size.height); hRec = UIEdgeInsetsInsetRect(hRec, UIEdgeInsetsMake(10, 0, 10, 0)); UIImageView *verImgView = [UIImageView ImageViewImageName:nil frame:hRec]; verImgView.image = [UIImage ImageWithColor:rgb(213, 214, 218) frame:verImgView.bounds]; [self addSubview:verImgView]; } } //这个在按钮中加背景 UIImageView *btnBottnImg = [UIImageView ImageViewImageName:nil frame:imgRec]; btnBottnImg.image = [UIImage ImageWithColor:rgb(213, 214, 218) frame:btnBottnImg.bounds]; [self addSubview:btnBottnImg]; //移动背景 moveImageView = [UIImageView ImageViewImageName:nil frame:UIEdgeInsetsInsetRect(imgRec, UIEdgeInsetsMake(0, 0, 0, (self.itemCount - 1) * btnWidth))]; moveImageView.image = [UIImage ImageWithColor:rgb(109, 209, 62) frame:moveImageView.bounds]; [self addSubview:moveImageView]; } break; } [self layoutSubviews];}-(void) buttonTapped:(id) sender//按钮点击事件{ UIButton *button = (UIButton*) sender; for(int i = 0; i < self.itemCount; i++) { UIButton *thisButton = (UIButton*) [self viewWithTag:i + kButtonBaseTag]; if(i + kButtonBaseTag == button.tag) thisButton.selected = YES; else thisButton.selected = NO; } CGRect mRec = moveImageView.frame; moveImageView.frame = CGRectMake(button.frame.origin.x,mRec.origin.y, button.frame.size.width, mRec.size.height);//移动背景 [self.itemSelectedDelegate horizMenu:self itemSelectedAtIndex:button.tag - kButtonBaseTag];}

 

 

第二种方式 修改 MKHorizMenu.m文件

////  MKHorizMenu.m//  MKHorizMenuDemo//  Created by Mugunth on 09/05/11.//  Copyright 2011 Steinlogic. All rights reserved.//  Permission granted to do anything, commercial/non-commercial with this file apart from removing the line/URL above//  Read my blog post at http://mk.sg/8h on how to use this code//  As a side note on using this code, you might consider giving some credit to me by//    1) linking my website from your app's website //    2) or crediting me inside the app's credits page //    3) or a tweet mentioning @mugunthkumar//    4) A paypal donation to mugunth.kumar@gmail.com////  A note on redistribution//    While I'm ok with modifications to this source code, //    if you are re-publishing after editing, please retain the above copyright notices#import "MKHorizMenu.h"#define kButtonBaseTag 10000#define kLeftOffset 10@implementation MKHorizMenu@synthesize titles = _titles;@synthesize selectedImage = _selectedImage;@synthesize itemSelectedDelegate;@synthesize dataSource;@synthesize itemCount = _itemCount;-(void) awakeFromNib{    self.bounces = YES;    self.scrollEnabled = YES;    self.alwaysBounceHorizontal = YES;    self.alwaysBounceVertical = NO;    self.showsHorizontalScrollIndicator = NO;    self.showsVerticalScrollIndicator = NO;    [self reloadData];}     -(void) reloadData{    NSArray *viewsToRemove = [self subviews];    for (UIView *v in viewsToRemove) {        [v removeFromSuperview];    }        self.itemCount = [dataSource numberOfItemsForMenu:self];    self.backgroundColor = [dataSource backgroundColorForMenu:self];    //self.selectedImage = [dataSource selectedItemImageForMenu:self]; 去掉背景色    UIFont *buttonFont = [UIFont boldSystemFontOfSize:15];    int buttonPadding = 25;        int tag = kButtonBaseTag;//    int xPos = kLeftOffset;  //fix 增加 自定义宽度和高度    int width=self.bounds.size.width/self.itemCount;    int height=self.bounds.size.height;    //    for(int i = 0 ; i < self.itemCount; i ++)    {        NSString *title = [dataSource horizMenu:self titleForItemAtIndex:i];        UIButton *customButton = [UIButton buttonWithType:UIButtonTypeCustom];        [customButton setTitle:title forState:UIControlStateNormal];        customButton.titleLabel.font = buttonFont;                //[customButton setBackgroundImage:self.selectedImage forState:UIControlStateSelected];//去掉button的背景                customButton.tag = tag++;        [customButton addTarget:self action:@selector(buttonTapped:) forControlEvents:UIControlEventTouchUpInside];                int buttonWidth = [title sizeWithFont:customButton.titleLabel.font                            constrainedToSize:CGSizeMake(150, 28)                                 lineBreakMode:UILineBreakModeClip].width;        customButton.frame=CGRectMake(i*width, 0, width, height);//设置uttton通的宽度和高度//        customButton.frame = CGRectMake(xPos, 7, buttonWidth + buttonPadding, 28);//        xPos += buttonWidth;//        xPos += buttonPadding;        [self addSubview:customButton];    }        // bretdabaker: added right padding to contentSize//    xPos += kLeftOffset;       // self.contentSize = CGSizeMake(xPos, 41);    [self layoutSubviews];  }-(void) setSelectedIndex:(int) index animated:(BOOL) animated{    UIButton *thisButton = (UIButton*) [self viewWithTag:index + kButtonBaseTag];        thisButton.selected = YES;    [self setContentOffset:CGPointMake(thisButton.frame.origin.x - kLeftOffset, 0) animated:animated];    [self.itemSelectedDelegate horizMenu:self itemSelectedAtIndex:index];}-(void) buttonTapped:(id) sender{    UIButton *button = (UIButton*) sender;        for(int i = 0; i < self.itemCount; i++)    {        UIButton *thisButton = (UIButton*) [self viewWithTag:i + kButtonBaseTag];        if(i + kButtonBaseTag == button.tag)            thisButton.selected = YES;        else            thisButton.selected = NO;    }        [self.itemSelectedDelegate horizMenu:self itemSelectedAtIndex:button.tag - kButtonBaseTag];}- (void)dealloc{    [_selectedImage release];    _selectedImage = nil;    [_titles release];    _titles = nil;        [super dealloc];}@end

分析

MKHorizMenu.m文件
#import "MKHorizMenu.h"#define kButtonBaseTag 10000#define kLeftOffset 10@implementation MKHorizMenu@synthesize titles = _titles;@synthesize selectedImage = _selectedImage;@synthesize itemSelectedDelegate;@synthesize dataSource;@synthesize itemCount = _itemCount;-(void) awakeFromNib{    self.bounces = YES;    self.scrollEnabled = YES;    self.alwaysBounceHorizontal = YES;    self.alwaysBounceVertical = NO;    self.showsHorizontalScrollIndicator = NO;    self.showsVerticalScrollIndicator = NO;    [self reloadData];}     -(void) reloadData{    NSArray *viewsToRemove = [self subviews];    for (UIView *v in viewsToRemove) {        [v removeFromSuperview];    }        self.itemCount = [dataSource numberOfItemsForMenu:self];//得到多少按钮    self.backgroundColor = [dataSource backgroundColorForMenu:self];//得到背景色    self.selectedImage = [dataSource selectedItemImageForMenu:self];//得到背景图片    UIFont *buttonFont = [UIFont boldSystemFontOfSize:15];    int buttonPadding = 25;//间距        int tag = kButtonBaseTag;        int xPos = kLeftOffset;    for(int i = 0 ; i < self.itemCount; i ++)    {        NSString *title = [dataSource horizMenu:self titleForItemAtIndex:i];//得到标题        UIButton *customButton = [UIButton buttonWithType:UIButtonTypeCustom];        [customButton setTitle:title forState:UIControlStateNormal];        customButton.titleLabel.font = buttonFont;//设置字体                [customButton setBackgroundImage:self.selectedImage forState:UIControlStateSelected];//设置图片                customButton.tag = tag++;//设置tag        [customButton addTarget:self action:@selector(buttonTapped:) forControlEvents:UIControlEventTouchUpInside];//添加事件                int buttonWidth = [title sizeWithFont:customButton.titleLabel.font                            constrainedToSize:CGSizeMake(150, 28)                                 lineBreakMode:UILineBreakModeClip].width;                customButton.frame = CGRectMake(xPos, 7, buttonWidth + buttonPadding, 28);//设置每个button的位置        xPos += buttonWidth;        xPos += buttonPadding;        [self addSubview:customButton];            }        // bretdabaker: added right padding to contentSize    xPos += kLeftOffset;        self.contentSize = CGSizeMake(xPos, 41);        [self layoutSubviews];  }-(void) setSelectedIndex:(int) index animated:(BOOL) animated//点击时触发事件。{    UIButton *thisButton = (UIButton*) [self viewWithTag:index + kButtonBaseTag];        thisButton.selected = YES;    [self setContentOffset:CGPointMake(thisButton.frame.origin.x - kLeftOffset, 0) animated:animated];    [self.itemSelectedDelegate horizMenu:self itemSelectedAtIndex:index];//事件}-(void) buttonTapped:(id) sender{    UIButton *button = (UIButton*) sender;        for(int i = 0; i < self.itemCount; i++)    {        UIButton *thisButton = (UIButton*) [self viewWithTag:i + kButtonBaseTag];        if(i + kButtonBaseTag == button.tag)            thisButton.selected = YES;        else            thisButton.selected = NO;    }        [self.itemSelectedDelegate horizMenu:self itemSelectedAtIndex:button.tag - kButtonBaseTag];//点击事件}- (void)dealloc{    [_selectedImage release];    _selectedImage = nil;    [_titles release];    _titles = nil;        [super dealloc];}@end

 

 

 

转载地址:http://zbnlx.baihongyu.com/

你可能感兴趣的文章
初探Cgroups(控制组群)
查看>>
从零开始学_JavaScript_系列(21)——dojo(8)(手把手教你封装一个widget)
查看>>
[Java] equals与==的区别
查看>>
[NHibernate]并发控制
查看>>
C++设计模式8--装饰模式(Decorator)--动态的增减功能
查看>>
C# WCF DataContractSerializer 类
查看>>
高性能 React 组件
查看>>
可能是最早的学习Android N新特性的文章
查看>>
【第二届PHP全球开发者大会】淘宝技术专家信海龙:淘宝社区双十一性能优化实践...
查看>>
关于Weex你需要知道的一切
查看>>
CSS 加载新方式
查看>>
操作系统概念学习笔记 1 加电引导过程
查看>>
Word文档生成
查看>>
groovy–流程控制
查看>>
iOS开发数据库篇—FMDB数据库队列
查看>>
[翻译] AFNetworking 2.0
查看>>
DevTools in Spring Boot
查看>>
[Ubuntu]安装Mysql
查看>>
HTTP协议header中Content-Disposition中文文件名乱码
查看>>
PostgreSQL Oracle 兼容性之 - add_months
查看>>