• ios中MKHorizMenu用法


     下载地址  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
     
  • 相关阅读:
    太可爱了!CSS3 & SVG 制作的米老鼠钟表
    20个免费的 AngularJS 资源和开发教程
    比尔盖茨:反垄断案让我分心,不然微软定能打败安卓(胜者通吃的行业要不计代价的三班倒,评论很精彩)
    C++11 新特性之智能指针(shared_ptr, unique_ptr, weak_ptr)
    C++编译器会对没有构造函数的类生成默认构造函数吗?(有必要的时候才生成,要看情况。有反汇编验证)
    qt5信息提示框QMessageBox用法(很全)
    (RPC) Remote Procedure Call Protocol 远程过程调用协议
    分布式事务就是由多个本地事务组合而成的事务
    内存管理--虚拟内存管理技术
    NET适合搞大数据,机器学习、人工智能
  • 原文地址:https://www.cnblogs.com/gcb999/p/3231747.html
Copyright © 2020-2023  润新知