iOS开发之自定义TabBarController-present(模态)出控制器

本文介绍如何在iOS开发中自定义TabBarController,实现点击中间按钮时以模态方式present控制器,而非切换视图。通过创建JFTabBarController,替换默认TabBar,并详细说明实现步骤和关键代码。
摘要由CSDN通过智能技术生成

点击TabBar present出控制器.gif

如上图这种点击TabBar中间Button时present(模态)出控制器,而点击TabBar其它的Button则是苹果默认的直接切换视图的方式,现在很多APP都在使用,特别是直播APP,基本都把直播端模块放在这,最近在仿喵播时正好做到这,就想在网上找现成的框架,结果一直没找到能满足这种需求的框架,就自己动手写了一个,没有仔细打磨算不上框架,但绝对简单好用!

自定义TabBarController实现原理很简单,无非是用自定义的Button替换掉苹果自带的TabBar上的Button,一般目的是想TabBar上方显示按钮图片,下面是文字;也就是每个Button下面有一个Label。实现这些的重点是计算ButtonLabel的宽度和X坐标值。

下面是JFTabBarController代码实现:

1、 新建三个类:

  • JFTabBar继承自UIview
  • JFTabBarButton继承自UIButton
  • JFTabBarController继承自UITabBarController

2、具体代码:

  • JFTabBar.h
#import <UIKit/UIKit.h>

@class JFTabBar;

@protocol JFTabBarDelegate <NSObject>

@optional

- (void)tabBar:(JFTabBar *)tabBar didSelectedButtonFrom:(int)from to:(int)to;

@end

@interface JFTabBar : UIView

- (void)addTabBarButtonWithItem:(UITabBarItem *)item;

- (void)customTheMiddleButtonWithImageName:(NSString *)imageName;

@property (nonatomic, weak) id<JFTabBarDelegate> delegate;

@end
  • JFTabBar.m
#import "JFTabBar.h"

#import "JFTabBarButton.h"

//中间按钮被点击的通知
//此通知需要在JFTabBarController中监听
static NSString * const JFTabBarClickMiddleButtonDidNotification = @"JFTabBarClickMiddleButtonDidNotification";

@interface JFTabBar(){
   
    CGFloat _buttonW;
}

@property (nonatomic, weak) JFTabBarButton *selectedButton;

@property (nonatomic, strong) UIButton *middleButton;

@end

@implementation JFTabBar

- (void)addTabBarButtonWithItem:(UITabBarItem *)item {
    JFTabBarButton *button = [[JFTabBarButton alloc] init];
    [self addSubview:button];
    button.item = item;
    [button addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchDown];
    if (self.subviews.count == 1) {
        [self buttonClick:button];
    }
}

- (void)buttonClick:(JFTabBarButton *)button {
    if ([self.delegat
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值