iOS开发代码段牛叉的demo

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

2016-06-28  本文已影响2145人  wMellon

文中代码来源: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处理。效果如下:

上一篇下一篇

猜你喜欢

热点阅读