如何监听Tabbar的点击

本文介绍了如何监听Tabbar的点击,包括非自定义和自定义Tabbar的情况。对于非自定义Tabbar,可以通过实现代理方法并发送通知来监听;对于自定义Tabbar,可以在Tabbar的按钮点击事件中发送通知。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如何监听Tabbar的点击

如果不是自定义的Tabbar

  • 实现UITabBarController的代理方法tabBarController: didSelectViewController:, 每次Tabbar被点击了都会来到这个代理方法
  • 在这个代理方法中发送通知
  • 在需要监听Tabbar点击的控制器中监听上面发出的通知
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{  
    [[NSNotificationCenter defaultCenter] postNotificationName:AHTabBarDidSelectNotification object:nil userInfo:nil];
}
// 监听通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(tabBarSelect) name:AHTabBarDidSelectNotification object:nil];
- (void)tabBarSelect{
// 如果是连续选中2次, 直接刷新
if(self.lastSelectedIndex == self.tabBarController.selectedIndex && self.view.isShowingOnKeyWindow){
    [self.tableView.mj_header beginRefreshing];
}

self.lastSelectedIndex = self.tabBarController.selectedIndex;
}

如果是自定义的Tabbar

  • 在自定义的Tabbar中, 给Tabbar中的UITabBarButton添加Target, 每次UITabBarButton一点击, 就发送通知, 剩下的基本和上面一样

自定义的tabbar

  • .h
//
//  AHTabBar.h
//  01-百思不得其姐
//
//  Created by AHUAN on 16/3/2.
//  Copyright © 2016年 AHUAN. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface AHTabBar : UITabBar

@end
  • .m
#import "AHTabBar.h"
#import "AHPublishView.h"

@interface AHTabBar()
/** 加按钮 */
@property (strong, nonatomic) UIButton *publishButton;

@end

@implementation AHTabBar

- (instancetype)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self){
        [self setBackgroundImage:[UIImage imageNamed:@"tabbar-light"]];
        UIButton *publishButton = [UIButton buttonWithType:UIButtonTypeCustom];
        [publishButton setBackgroundImage:[UIImage imageNamed:@"tabBar_publish_icon"] forState:UIControlStateNormal];
        [publishButton setBackgroundImage:[UIImage imageNamed:@"tabBar_publish_icon_click"] forState:UIControlStateHighlighted];
        publishButton.size = publishButton.currentBackgroundImage.size;
        [publishButton addTarget:self action:@selector(publishClick) forControlEvents:UIControlEventTouchUpInside];
        self.publishButton = publishButton;

        [self addSubview:publishButton];

    }
    return self;
}

- (void)layoutSubviews{

    [super layoutSubviews];

    // 标记按钮是否已经添加过监听器
    static BOOL added = NO;


    CGFloat width = self.width;
    CGFloat height = self.height;

    self.publishButton.center = CGPointMake(width * 0.5, height * 0.5);

    CGFloat buttonY = 0;
    CGFloat buttonW = width / 5;
    CGFloat buttonH = height;
    NSInteger index = 0;
    for(UIControl *button in self.subviews){

        if (![button isKindOfClass:NSClassFromString(@"UITabBarButton")]) continue;
        // 计算按钮的x值
        CGFloat buttonX = buttonW * ((index > 1)?(index + 1):index);
        button.frame = CGRectMake(buttonX, buttonY, buttonW, buttonH);

        // 增加索引
        index++;
        if(added == NO){
            [button addTarget:self action:@selector(buttonClick) forControlEvents:UIControlEventTouchUpInside];
        }
    }
    added = YES;
}

- (void)buttonClick{
    [[NSNotificationCenter defaultCenter] postNotificationName:AHTabBarDidSelectNotification object:nil userInfo:nil];
}

- (void)publishClick{
    [AHPublishView show];

}
@end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值