iOS:CYLTabBarController的具体使用实例:实现新浪微博的主流框架

简介:

使用CocoaPods或者手动集成将CYLTabBarController这个第三方框架导入项目后,截图如下:

 

在AppDelegate.m类中实现的代码如下:

复制代码
//  AppDelegate.m
//  CYLTabBarController
//
//  Created by mac on 16/1/28.
//  Copyright © 2016年 mac. All rights reserved.
//

#import "AppDelegate.h"

#import <CYLTabBarController.h>
#import <CYLTabBar.h>

#import "HomeViewController.h"
#import "MessageViewController.h"
#import "ComposeViewController.h"
#import "DiscoverViewController.h"
#import "MineViewController.h"



@interface AppDelegate ()

@end

@implementation AppDelegate


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
    //创建CYLTabBarController的对象
    CYLTabBarController *CYLtabVC = [[CYLTabBarController alloc]init];
    
    //设置CYLTabBarController对象的标签栏属性按钮
    CYLtabVC.tabBarItemsAttributes = [self createTabBarItemsAttributes];
    
    //设置CYLTabBarController对象的标签栏子控制器数组
    CYLtabVC.viewControllers = [self createTabBarViewControllers];
    
    //设置tabbar按钮的文字颜色
    [self customizeInterface];
    
    //设置添加按钮的事件,模态出发布控制器
    if (CYLExternPushlishButton) {
        
        [CYLExternPushlishButton addTarget:self action:@selector(composeButtonClcked:) forControlEvents:UIControlEventTouchUpInside];
    }
    
    //设置CYLTabBarController的对象的根控制器
    [self.window setRootViewController:CYLtabVC];

    return YES;
}

#pragma mark - 模态出发布控制器
-(void)composeButtonClcked:(id)sender{
    
    ComposeViewController *composeVC = [[ComposeViewController alloc]init];
    [self.window.rootViewController presentViewController:composeVC animated:YES completion:nil];
}


#pragma mark - 创建标签栏子控制器数组
-(NSArray *)createTabBarViewControllers{
    
    //主页
    HomeViewController *homeVC = [[HomeViewController alloc] init];
    UINavigationController *homeNaV = [[UINavigationController alloc]initWithRootViewController:homeVC];
    
    //消息
    MessageViewController *messageVC = [[MessageViewController alloc] init];
    UINavigationController *messageNaV = [[UINavigationController alloc]initWithRootViewController:messageVC];
    
    //发现
    DiscoverViewController *foundVC = [[DiscoverViewController alloc]init];
    UINavigationController *foundNaV = [[UINavigationController alloc]initWithRootViewController:foundVC];
    
    //我的
    MineViewController *mineVC = [[MineViewController alloc]init];
    UINavigationController *mineNaV = [[UINavigationController alloc]initWithRootViewController:mineVC];
    
    return @[homeNaV,messageNaV,foundNaV,mineNaV];
}

#pragma mark - 创建标签栏按钮item数组
-(NSArray *)createTabBarItemsAttributes{
    
    NSDictionary *dict1 = @{
                            CYLTabBarItemTitle : @"首页",
                            CYLTabBarItemImage : @"tabbar_home",
                            CYLTabBarItemSelectedImage : @"tabbar_home_selected",
                            };
    NSDictionary *dict2 = @{
                            CYLTabBarItemTitle : @"消息",
                            CYLTabBarItemImage : @"tabbar_message_center",
                            CYLTabBarItemSelectedImage : @"tabbar_message_center_selected",
                            };
    NSDictionary *dict3 = @{
                            CYLTabBarItemTitle : @"发现",
                            CYLTabBarItemImage : @"tabbar_discover",
                            CYLTabBarItemSelectedImage : @"tabbar_discover_selected",
                            };
    NSDictionary *dict4 = @{
                            CYLTabBarItemTitle : @"我的",
                            CYLTabBarItemImage : @"tabbar_profile",
                            CYLTabBarItemSelectedImage : @"tabbar_profile_selected",
                            };
    return @[ dict1, dict2, dict3, dict4];
}

#pragma mark - 设置tabbar按钮的文字颜色
- (void)customizeInterface {
    
    // 普通状态下的文字属性
    NSMutableDictionary *normalAttrs = [NSMutableDictionary dictionary];
    normalAttrs[NSForegroundColorAttributeName] = [UIColor grayColor];
    
    // 选中状态下的文字属性
    NSMutableDictionary *selectedAttrs = [NSMutableDictionary dictionary];
    selectedAttrs[NSForegroundColorAttributeName] = [UIColor orangeColor];
    
    // 设置文字属性
    UITabBarItem *tabBar = [UITabBarItem appearance];
    [tabBar setTitleTextAttributes:normalAttrs forState:UIControlStateNormal];
    [tabBar setTitleTextAttributes:selectedAttrs forState:UIControlStateSelected];
    
    // 设置背景图片
    UITabBar *tabBarAppearance = [UITabBar appearance];
    [tabBarAppearance setBackgroundImage:[UIImage imageNamed:@"tabbar_background"]];
}
@end
复制代码

 

在需要添加的按钮类ComposeButton类中,实现的代码如下:

ComposeButton.h文件:

复制代码
//  ComposeButton.h
//  CYLTabBarController
//
//  Created by mac on 16/1/28.
//  Copyright © 2016年 mac. All rights reserved.
//

#import <CYLPlusButton.h>

@interface ComposeButton : CYLPlusButton<CYLPlusButtonSubclassing>

@end
复制代码

ComposeButton.h文件:

复制代码
//  ComposeButton.m
//  CYLTabBarController
//
//  Created by mac on 16/1/28.
//  Copyright © 2016年 mac. All rights reserved.
//

#import "ComposeButton.h"

@implementation ComposeButton

+(void)load{
    [super registerSubclass];
}

+(instancetype)plusButton{
    
    ComposeButton *composeButton = [[ComposeButton alloc]initWithFrame:CGRectMake(0, 0, 44, 44)];
    
    //设置背景
    [composeButton setBackgroundImage:[UIImage imageNamed:@"tabbar_compose_button"] forState:UIControlStateNormal];
    [composeButton setBackgroundImage:[UIImage imageNamed:@"tabbar_compose_button_highlighted"] forState:UIControlStateHighlighted];
    
    //设置按钮
    [composeButton setImage:[UIImage imageNamed:@"tabbar_compose_icon_add"] forState:UIControlStateNormal];
    [composeButton setImage:[UIImage imageNamed:@"tabbar_compose_icon_add_highlighted"] forState:UIControlStateSelected];
    
    return composeButton;
}


//返回插入位置,因为是奇数,所以不用指定安放的位置,它会自动调整位置
//+ (NSUInteger)indexOfPlusButtonInTabBar{
//    
//    return 2;
//}

@end
复制代码

 

在发布控制器中实现的是代码:ComposeViewController.m

复制代码
//  ComposeViewController.m
//  CYLTabBarController
//
//  Created by mac on 16/1/28.
//  Copyright © 2016年 mac. All rights reserved.
//

#import "ComposeViewController.h"

@interface ComposeViewController ()
@property (strong,nonatomic)UIToolbar *topToolBar;
@end

#define SCREEN_WIDTH  [UIScreen mainScreen].bounds.size.width
#define SCREEN_HEIGHT [UIScreen mainScreen].bounds.size.height

@implementation ComposeViewController


/**
 *  设置工具栏
*/
-(void)viewWillAppear:(BOOL)animated{
    
    [[UIToolbar appearance]setTintColor:[UIColor brownColor]];
    
    self.topToolBar = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, 64)];
    
    UIBarButtonItem *leftItem = [[UIBarButtonItem alloc]initWithTitle:@"返回" style:UIBarButtonItemStylePlain target:self action:@selector(leftItemBack:)];
    
    UIBarButtonItem *flexItem = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
    
    UIBarButtonItem *midItem = [[UIBarButtonItem alloc]initWithTitle:@"发布新微薄" style:UIBarButtonItemStylePlain target:nil action:nil];
    [midItem setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor blackColor]} forState:UIControlStateNormal];
    [midItem setEnabled:NO];
    
    UIBarButtonItem *rightItem = [[UIBarButtonItem alloc]initWithTitle:@"发送" style:UIBarButtonItemStylePlain target:self action:@selector(rightItemSend:)];
    
    self.topToolBar.items = @[leftItem,flexItem,midItem,flexItem,rightItem];
    
    [self.view addSubview:self.topToolBar];
}

- (void)viewDidLoad {
    [super viewDidLoad];
 
    self.title = @"发布";
    self.view.backgroundColor = [UIColor lightGrayColor];
}

#pragma mark - 返回按钮事件,关闭模态的发布控制器
-(void)leftItemBack:(UIBarButtonItem *)sender{
    
    [self.view.window.rootViewController dismissViewControllerAnimated:YES completion:nil];
}

#pragma mark - 发布按钮事件,发布新的微博
-(void)rightItemSend:(UIBarButtonItem *)sender{
    
    NSLog(@"%s",__func__);
}

@end
复制代码

 

 

演示截图如下:                                         点击发布按钮时:

 

 

程序猿神奇的手,每时每刻,这双手都在改变着世界的交互方式!
本文转自当天真遇到现实博客园博客,原文链接:http://www.cnblogs.com/XYQ-208910/p/5166778.html ,如需转载请自行联系原作者

相关文章
|
3月前
|
机器学习/深度学习 PyTorch TensorFlow
是否有其他框架可以在iOS设备上进行机器学习?
是否有其他框架可以在iOS设备上进行机器学习?
21 1
|
3月前
|
存储 数据建模 iOS开发
iOS设备功能和框架: 什么是 Core Data,它在 iOS 中的作用是什么?
iOS设备功能和框架: 什么是 Core Data,它在 iOS 中的作用是什么?
33 1
|
3月前
|
定位技术 iOS开发
iOS设备功能和框架: 如何使用 Core Location 获取设备的位置信息?
iOS设备功能和框架: 如何使用 Core Location 获取设备的位置信息?
19 0
|
3月前
|
机器学习/深度学习 PyTorch TensorFlow
iOS设备功能和框架: 什么是 Core ML?如何在应用中集成机器学习模型?
iOS设备功能和框架: 什么是 Core ML?如何在应用中集成机器学习模型?
27 0
|
3月前
|
iOS开发
iOS设备功能和框架: 如何使用 Core Animation 创建动画效果?
iOS设备功能和框架: 如何使用 Core Animation 创建动画效果?
101 0
|
5月前
|
小程序 开发工具 Android开发
Donut多端框架小程序打包适配ios和安卓app
腾讯新出了一个 Donut 多端框架,可以直接将微信小程序转成 ios 和 安卓 app,小程序开发者工具里也集成了 app 相关升级、调试和打包的功能,终于可以一套代码开发出3个客户端了!
129 0
Donut多端框架小程序打包适配ios和安卓app
|
5月前
|
移动开发 网络协议 安全
基于开源IM即时通讯框架MobileIMSDK:RainbowChat-iOS端v8.0版已发布
MobileIMSDK 是一套专门为移动端开发的开源IM即时通讯框架,超轻量级、高度提炼,一套API优雅支持 UDP 、TCP 、WebSocket 三种协议,支持 iOS、Android、H5、标准Java、小程序、Uniapp,服务端基于Netty编写。
70 0
|
7月前
|
Swift iOS开发
IOS 小说阅读《覆盖翻页》效果框架 DZMCoverAnimation
IOS 小说阅读《覆盖翻页》效果框架 DZMCoverAnimation
55 0
|
安全 数据安全/隐私保护 iOS开发
iOS小技能:【发红包】使用tweak和lua脚本结合进行实现
我们开发的大部分越狱程序,都是编译成动态链接库(`例如:介绍的越狱程序(Tweak)开发,就是动态链接库。`),然后通过越狱平台的MobileSubstrate(iOS7上叫CydiaSubstrate)来加载进入目标程序(Target),通过对目标程序的挂钩(Hook),来实现相应的功能。
262 0
|
9月前
|
JavaScript Android开发 iOS开发
layui框架实战案例(6):上传图片和视频自动调用IOS或安卓系统的摄像头功能
layui框架实战案例(6):上传图片和视频自动调用IOS或安卓系统的摄像头功能
228 0

相关实验场景

更多