美文网首页iOS Developer
通过KVC修改私有成员变量,自定义tabbar

通过KVC修改私有成员变量,自定义tabbar

作者: 一夜暴富两夜也行 | 来源:发表于2017-03-06 17:09 被阅读99次

KVC,全拼“key value coding”。都知道在字典转模型上有奇效,其实通过它,还能访问私有成员变量,并间接修改替换它的值。

接下来以自定义tabbar做个范例:

KVC如何实现上面的效果?

1、写一个MJTarbar继承于UITabBar;

2、在MJTabbar 上加一个按钮,设置按钮的image、size,中心点在tabbar的中心点,按钮点击事件可用delegate或者block传递;

3、在layoutSubviews重新排布MJTarbar上的UITabBarButton的frame(size.width,origin.x);

- (void)layoutSubviews{

[superlayoutSubviews];

// 1.设置按钮的位置

CGPointtemp =self.plusBtn.center;

temp.x=self.frame.size.width/2;

temp.y=self.frame.size.height/2-25;

self.plusBtn.center=temp;

// 2.设置其它UITabBarButton的位置和尺寸

CGFloattabbarButtonW =self.frame.size.width/5;

CGFloattabbarButtonIndex =0;

for(UIView*childinself.subviews) {

NSLog(@"child:%@",child);

Class class =NSClassFromString(@"UITabBarButton");

if([childisKindOfClass:class]) {

//设置宽度

CGRecttemp1=child.frame;

temp1.size.width=tabbarButtonW;

temp1.origin.x=tabbarButtonIndex * tabbarButtonW;

child.frame=temp1;

//增加索引

tabbarButtonIndex++;

if(tabbarButtonIndex ==2) {

tabbarButtonIndex++;

}

}

}

}

4、关键步骤,在UITabBarController中利用KVC,替换tabbar;

MJTabbar*tabbar = [[MJTabbaralloc]init];

tabbar.tabbarDelegate=self;

[selfsetValue:tabbarforKeyPath:@"tabBar"];

5、执行代理方法;

-(void)tabbarDidClickPlusBtn:(MJTabbar*)tabbar{

NSLog(@"--------------------点击了中间按钮---------------------");

[self presentViewController:[MJViewControllernew] animated:YEScompletion:nil];

}


6、到这一步UI部分差不多了,但是发现超出tabbar的那部分(上图红色区域)点击事件是没有响应的,这就需要在下1 API转化成相对中间按钮的坐标newPoint,通过下2 API判断newPoint是否在按钮的bounds区域内。

1、- (CGPoint)convertPoint:(CGPoint)point toView:(nullableUIView*)view;

2、CG_EXTERN bool CGRectContainsPoint(CGRect rect, CGPoint point)

至此,UI及逻辑基本完成了。

那么像闲鱼APP中间的发布按钮点击旋转动画是怎么设置的呢?这个其实跟本期主题没关系(我也不会!!!),下次学一下再分享。

相关文章

  • 通过KVC修改私有成员变量,自定义tabbar

    KVC,全拼“key value coding”。都知道在字典转模型上有奇效,其实通过它,还能访问私有成员变量,并...

  • KVC的使用

    利用KVC修改类的私有成员变量(UIPageControl)

  • iOS--自定义控件

    1、定义系统私有属性时,无法赋值,可以采用KVC的方式直接个成员变量赋值。例如我们想自定义一个tabBar,系统的...

  • Objective-C Runtime API的应用

    查看私有成员变量 获取到成员变量的名称,就能通过KVC为私有成员变量设置值,比如 替换方法实现,交换方法 clas...

  • 访问私有属性&NSValue包装

    自定义类Honzon,一个私有成员变量test和一个打印方法logTest KVC 调用私有方法 通过OC的运行时...

  • KVC和KVO及原理

    KVC (key-value-coding) 键值编码是一种通过字符串间接访问成员变量的方式(就算成员变量是私有的...

  • iOS修改私有属性&&成员变量(KVC)

    一、概述 修改私有属性,是我们日常开发中常见的一个场景。比如修改三方库的某个属性,可三方库并没有暴露该属性在头文件...

  • C++学习第2课,笔记

    1 类 成员变量 成员函数 private://私有的 public://公有的 *1 公有函数修改私有变量; *...

  • KVC change all Private

    基本知识就不再介绍 一.说一下: KVC可以随意修改一个对象的属性或者成员变量(并且私有的也可以修改)@prope...

  • 如何访问并修改一个类的私有属性

    1: 一种是通过KVC修改 2: 通过runtime访问并修改私有属性

网友评论

    本文标题:通过KVC修改私有成员变量,自定义tabbar

    本文链接:https://www.haomeiwen.com/subject/tcrugttx.html