【深入浅出IOS开发】彩票-代理实现子Controller的切换

知识点一览:

①TabBarController中通过设置selectedIndex来完成子控件的切换

②自定义UIButon,重写 setHighLighted可以在多次点击按钮时候不会重新设置高亮

③重写UITabBar的layOutSubViews可以设置控件的内部的元素的布局。

④UIControllEventTouchDown 按钮只要点击就触发事件。

重点:

⑤代理实现子Controller的切换



代码实现:

①MRBUtton:

[objc]  view plain copy
  1. #import "MRButton.h"  
  2.   
  3. @implementation MRButton  
  4.   
  5. - (void)setHighlighted:(BOOL)highlighted  
  6. {  
  7.     //[super setHighlighted:YES];  
  8. }  
  9. @end  


②MRTabBar

----------------------------------------------MRTabBar.h--------------------------------------------

[objc]  view plain copy
  1. #import <UIKit/UIKit.h>  
  2. @class MRTabBar;  
  3. //①设置协议的具体内容  
  4. @protocol MRTabBarDelegate <NSObject>  
  5.   
  6. - (void)tabBar:(MRTabBar*)tabBar didSelectItemFrom:(int)from to:(int)to;  
  7.   
  8. @end  
  9.   
  10. @interface MRTabBar : UITabBar  
  11. @property (nonatomic,weak) UIButton *button;  
  12. //②甲方在协议上签名  
  13. @property (nonatomic,weak) id<MRTabBarDelegate> delegate;  
  14. @end  

------------------------------------------------MRTabBar.m--------------------------------------------

[objc]  view plain copy
  1. #import "MRTabBar.h"  
  2. #import "MRButton.h"  
  3. @implementation MRTabBar  
  4. - (instancetype)initWithFrame:(CGRect)frame  
  5. {  
  6.   // [super initWithFrame:frame];  
  7.       
  8.     if (self = [super initWithFrame:frame]) {  
  9.         for (int i = 0; i < 5; i++) {  
  10.             //1.创建一个按钮  
  11.             MRButton *button = [MRButton buttonWithType:UIButtonTypeCustom];  
  12.             //2.设置按钮正常显示的图片  
  13.             NSString *strImage = [NSString stringWithFormat:@"TabBar%d",i+1];  
  14.             UIImage *image = [UIImage imageNamed:strImage];  
  15.             [button setImage:image forState:UIControlStateNormal];  
  16.             //3.设置按钮被选中的时候显示的图片  
  17.             NSString *strImageSel = [NSString stringWithFormat:@"TabBar%dSel",i+1];  
  18.             UIImage *imagehighLSel = [UIImage imageNamed:strImageSel];  
  19.             [button setImage:imagehighLSel forState:UIControlStateSelected];  
  20.             //4.设置按钮的frame  
  21.               
  22.             CGFloat width = self.frame.size.width*0.2;  
  23.             CGFloat height = self.frame.size.height;  
  24.             CGFloat xPos = i*width;  
  25.             CGFloat yPos = 0;  
  26.               
  27.             [button setFrame:CGRectMake(xPos, yPos, width, height)];  
  28.             //5.设置按钮的Target  
  29.             [button addTarget:self action:@selector(click:) forControlEvents:UIControlEventTouchDown];  
  30.             //6.设置按钮的tag  
  31.             [button setTag:i];  
  32.             //button.adjustsImageWhenDisabled = YES;  
  33.             //7.添加按钮到Tabbar  
  34.             [self addSubview:button];  
  35.               
  36.             if (i == 0) {  
  37.                 [self click:button];  
  38.             }  
  39.         }  
  40.     }  
  41.       
  42.     return self;  
  43. }  
  44.   
  45. -(void)click:(UIButton*)button  
  46. {  
  47.     //③告诉乙方协议中要求做的事情  
  48.     if ([self.delegate respondsToSelector:@selector(tabBar:didSelectItemFrom:to:)]) {  
  49.         [self.delegate tabBar:self didSelectItemFrom:self.button.tag to:button.tag];  
  50.     }  
  51.     //1.设置当前按钮不被选中  
  52.     self.button.selected =NO;  
  53.     //2.新点击的按钮被选中  
  54.     button.selected = YES;  
  55.       
  56.     //3.把新点击的按钮设置为当前按钮  
  57.     self.button = button;  
  58.     //4.切换子控制器  
  59.     //self.selectedIndex = button.tag;  
  60.     //self.button.tag = button.tag;  
  61. }  
  62. /* 
  63. // Only override drawRect: if you perform custom drawing. 
  64. // An empty implementation adversely affects performance during animation. 
  65. - (void)drawRect:(CGRect)rect { 
  66.     // Drawing code 
  67. } 
  68. */  
  69.   
  70. @end  

MRTabBarViewController.m

[objc]  view plain copy
  1. #import "MRTabBarViewController.h"  
  2. #import "MRButton.h"  
  3. #import "MRTabBar.h"  
  4.   
  5. @interface MRTabBarViewController ()<MRTabBarDelegate>//④乙方拿到协议  
  6. @property (nonatomic,weak) UIButton* button;  
  7. @end  
  8.   
  9. @implementation MRTabBarViewController  
  10. - (void)viewDidLoad  
  11. {  
  12.     [super viewDidLoad];  
  13.     //1.清除原有的TabBar  
  14.     [self.tabBar removeFromSuperview];  
  15.       
  16.     //2.生成一个新的TabBar  
  17.     MRTabBar *mrTabBar = [[MRTabBar alloc]initWithFrame:self.tabBar.frame];  
  18.     [mrTabBar setBackgroundColor:[UIColor redColor]];  
  19.       
  20.     //⑤表示接受甲方TabBar的协议,乙方签名  
  21.     mrTabBar.delegate = self;  
  22.     //3.将Tabbar添加到View中  
  23.     [self.view addSubview:mrTabBar];  
  24.    // self.selectedIndex =mrTabBar.button.tag;  
  25.      
  26.       
  27. }  
  28. //⑥实现TabBar的协议中的方法  
  29. - (void)tabBar:(MRTabBar*)tabBar didSelectItemFrom:(int)from to:(int)to  
  30. {  
  31.     self.selectedIndex = to;  
  32. }  
  33. @end  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值