美文网首页iOS开发资料收集iOS
淘宝下拉菜单的实现

淘宝下拉菜单的实现

作者: 悦思 | 来源:发表于2016-05-05 14:42 被阅读427次
    1.pic.jpg

    工程中有需要做成这种下拉效果的菜单,走了很多弯路,分享几种解决方法:
    1 xib
    仔细观察淘宝,发现它并不是一个UITableView啊,不可以滑动的。枉我还找了那么多第三方什么UITableView加在UIView上啊,废了很多时间。如果是固定死的菜单直接xib就好了。

    Paste_Image.png

    2 方法2 找到合适的第三方:
    KxMenu LKPopupMenu 之类的 CocoaChina Github Code4App 上有大把。

    3 iOS 8 以后有系统自带的方法。
    3.1 自定义一个UITableView 用来展示下拉数据

    #import "WMPopoverController.h"
    
    @interface WMPopoverController ()
    @property (nonatomic, strong) NSMutableArray *addArray;
    @end
    
    @implementation WMPopoverController
    - (void)viewDidLoad {
        [super viewDidLoad];
        self.tableView.scrollEnabled = NO;
        self.addArray = [[NSMutableArray alloc] initWithObjects:@"扫一扫",@"搜一搜", @"创建讨论组",@"发送到电脑", @"面对面快传",@"收钱", nil];
        
        
    }
    
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
        return self.addArray.count;
    }
    
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
        
        static NSString *identifer = @"cell";
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifer];
        if (cell == nil) {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifer];
        }
        cell.textLabel.text = [NSString stringWithFormat:@"%@", self.addArray[indexPath.row]];
        return cell;
    }
    
    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
        
        NSInteger number = indexPath.row;
        switch (number) {
            case 0:
                NSLog(@"扫一扫");
                break;
                
            case 1:
                NSLog(@"搜一搜");
                break;
                
            default:
                break;
        }
        
    }
    
    //重写preferredContentSize,返回popover的大小
    - (CGSize)preferredContentSize {
        if (self.presentingViewController && self.tableView != nil) {
            CGSize tempSize = self.presentingViewController.view.bounds.size;
            tempSize.width = 150;
            CGSize size = [self.tableView sizeThatFits:tempSize];  //sizeThatFits返回的是最合适的尺寸,但不会改变控件的大小
            return size;
        }else {
            return [super preferredContentSize];
        }
    }
    
    @end
    

    3.2 设置导航控制器的右点击事件

    - (void)viewDidLoad {
       [super viewDidLoad];
       // 右边
       self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(rightBarAction)];
    }
    

    3.3 点击按钮的调用方法

    @interface ViewController ()<UIPopoverPresentationControllerDelegate>
    /** WMPopoverController */
    @property (nonatomic, strong) WMPopoverController *itemPopVC;
    
    @end
    
    
    // 菜单  点击按钮调用的方法
    - (void)rightBarAction {
        
        self.itemPopVC = [[WMPopoverController alloc] init];
        self.itemPopVC.modalPresentationStyle = UIModalPresentationPopover;
        self.itemPopVC.popoverPresentationController.barButtonItem = self.navigationItem.rightBarButtonItem;
        //箭头方向
        self.itemPopVC.popoverPresentationController.permittedArrowDirections = UIPopoverArrowDirectionAny;
        //代理
        self.itemPopVC.popoverPresentationController.delegate = self;
        [self presentViewController:self.itemPopVC animated:YES completion:nil];
    }
    - (UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller {
        NSLog(@"%@",controller);
        return  UIModalPresentationNone;
    }
    

    但是实现起来的效果箭头圆滑并且颜色虚化。

    Paste_Image.png

    相关文章

      网友评论

      • 3fe40fe75d88:请问有没有像上面淘宝效果的demo呢。。
        悦思:@_林lin 不好意思 没做
      • 还有什么没有注册的:之前也用了tableView来做下拉菜单。。。然后改需求了,一个设置的tableView里面,有好几个cell。。然后可以弹出下拉菜单的。。。再这样写下去真的是恐怖如斯

      本文标题:淘宝下拉菜单的实现

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