美文网首页iOS开发代码段牛叉的demo
仿闲鱼APP底部发布功能(一)

仿闲鱼APP底部发布功能(一)

作者: wMellon | 来源:发表于2016-06-28 22:04 被阅读2145次

    文中代码来源:LLTabBar。

    设计思路:系统自带的tabBar做不到这个要求,所以可以在系统的tabBar上添加一个view来展示。那么问题来了,如何在我们新增的view上面处理点击事件?接下来看代码。

    LLTabBar

    LLTabBar *tabBar = [[LLTabBar alloc] initWithFrame:self.tabBar.bounds];

    tabBar.delegate = self;

    //中间省略tabBarItems的生成代码

    tabBar.tabBarItems = tabBarItems;

    [self.tabBar addSubview:tabBar];

    LLTabBar是一个view,创建LLTabBar的时候将系统tabBar的大小给了它。所以完全遮盖住了系统自带的tabBar。设置的代理下面会讲到。tabBarItems是LLTabBar定义的一个数组,里面包含的是底部的所有菜单项。之后将tabBar作为子view添加到系统自带的tabBar上。

    LLTabBarItem

    LLTabBarItem是一个button,可以在上面设置要显示的文本和图片。这里的item要分两种考虑,一种是普通的,就跟系统自带的一模一样;另一种是特殊的,专门用于发布按钮的,这里使用tabBarItemType来进行区分。可以对它添加点击事件,当点击到某个item时,LLTabBar做出响应。代码如下:

    - (void)itemSelected:(LLTabBarItem *)sender {

    if (sender.tabBarItemType != LLTabBarItemRise){

    [self setSelectedIndex:sender.tag]; //一般的item

    }else{

    //专门针对发布按钮的item

    if (self.delegate) {

    if ([self.delegate respondsToSelector:@selector(tabBarDidSelectedRiseButton)]) {

    [self.delegate tabBarDidSelectedRiseButton];

    }

    }

    }

    }

    对于一般的item来讲,我们需要模仿系统自带的tabBar的选中的效果。在处理的时候要注意一点:调用系统自带的选中方法后还需要处理被选中按钮的样式。这是因为我们现在看到的tabBar是我们自己的,系统自带的方法是没办法影响到我们这个view的。如下:

    - (void)setSelectedIndex:(NSInteger)index {

    for (UIButton *item in self.tabBarItems) {

    //需要执行这个,否则没有选中效果

    if (item.tag == index) {

    item.selected = YES;

    } else {

    item.selected = NO;

    }

    }

    UIWindow *keyWindow = [[[UIApplication sharedApplication] delegate] window];

    UITabBarController *tabBarController = (UITabBarController *)keyWindow.rootViewController;

    if (tabBarController) {

    tabBarController.selectedIndex = index;

    }

    }

    对于专门针对发布按钮的点击,则利用代理方法放在外面的VC处理。效果如下:

    相关文章

      网友评论

      • _Dam0n:请问下,怎么实现购买功能,能否说下思路

      本文标题:仿闲鱼APP底部发布功能(一)

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