美文网首页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

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