精华内容
下载资源
问答
  • 有时候,有一些下拉选择器的数据项,我们采取了枚举的方式简单记录,但是里面的东西多,前端不想写死,需要提供接口返回。 示例: 枚举 /** * @Author: JCccc * @Description: * @Date: Create in 10:51 2021...

    有时候,有一些下拉选择器的数据项,我们采取了枚举的方式简单记录,但是里面的东西多,前端不想写死,需要提供接口返回。

    示例:

    枚举

    /**
     * @Author: JCccc
     * @Description:
     * @Date: Create in 10:51 2021/1/25
     */
    public enum EducateStatusEnum {
    
        /**
         * 学生 学业状态
         */
        IN_STUDYING((short) 1, "在读"),
        UNDERGRADUATE((short) 2, "肆业"),
        SUSPENDED((short) 3, "休学"),
        DROPPED((short) 4, "辍学"),
        QUITED((short) 5, "退学"),
        GRADUATED((short) 6, "已毕业"),
    
    
        ;
        public short code;
        public String name;
    
        EducateStatusEnum(Short code, String name) {
            this.code = code;
            this.name = name;
        }
    
        public int getCode() {
            return this.code;
        }
    
        public String getName() {
            return this.name;
        }
    
        public static EducateStatusEnum findEnumByCode(Integer code) {
    
            for (EducateStatusEnum statusEnum : EducateStatusEnum.values()) {
                if (statusEnum.getCode() == code) {
                    return statusEnum;
                }
    
            }
            throw new IllegalArgumentException("code is not support");
    
        }
    
        public static EducateStatusEnum findEnumByName(String name) {
            for (EducateStatusEnum statusEnum : EducateStatusEnum.values()) {
                if (statusEnum.getName().equals(name)) {
                    return statusEnum;
                }
    
            }
            throw new IllegalArgumentException("name is not support");
        }
    
    
    }
    

    工具类:
    ps :如果不想引入jar,自己写对应的判空逻辑即可。

    import org.apache.commons.lang3.StringUtils;

    import org.springframework.util.CollectionUtils;

    /**
     * @Author: JCccc
     * @Description: 将枚举转换为list类型
     * @Date: Create in 19:03 2021/1/26
     */
    
    public class EnumListUtil {
    
        private static String ENUM_CLASSPATH="java.lang.Enum";
    
        public static List<Map<String, Object>> enumToListMap(Class<?> enumClass) {
            List<Map<String, Object>> resultList= new ArrayList<>();
            if (!ENUM_CLASSPATH.equals(enumClass.getSuperclass().getCanonicalName())) {
                return resultList;
            }
            // 获取所有public方法
            Method[] methods = enumClass.getMethods();
            List<Field> fieldList = new ArrayList<>();
            //1.通过get方法提取字段,避免get作为自定义方法的开头,建议使用 ‘find’或其余命名
            Arrays.stream(methods)
                    .map(Method::getName)
                    .filter(
                            methodName -> methodName.startsWith("get") && !"getDeclaringClass".equals(methodName) && !"getClass".equals(methodName)
                    ).forEachOrdered(methodName -> {
                        try {
                            Field field = enumClass.getDeclaredField(StringUtils.uncapitalize(methodName.substring(3)));
                            if (null != field) {
                                fieldList.add(field);
                            }
                        } catch (NoSuchFieldException | SecurityException e) {
                            e.printStackTrace();
                        }
            });
    
            //2.将字段作为key,逐一把枚举值作为value 存入list
            if (CollectionUtils.isEmpty(fieldList)) {
                return resultList;
            }
    
            Enum<?>[] enums = (Enum[]) enumClass.getEnumConstants();
            for (Enum<?> anEnum : enums) {
                Map<String, Object> map = new HashMap<>(fieldList.size());
                for (Field field : fieldList) {
                    field.setAccessible(true);
                    try {
                        // 向map集合添加字段名称 和 字段值
                        map.put(field.getName(), field.get(anEnum));
                    } catch (IllegalArgumentException | IllegalAccessException e) {
                        e.printStackTrace();
                    }
                }
                // 将Map添加到集合中
                resultList.add(map);
            }
            return resultList;
        }
    
        public static void main(String[] args) {
    
    
            // 枚举类
            System.out.println(enumToListMap(EducateStatusEnum.class));
    
    
        }
    
    }

    实现效果: 


    [

    {name=在读, code=1},

    {name=肆业, code=2},

    {name=休学, code=3},

    {name=辍学, code=4},

    {name=退学, code=5},

    {name=已毕业, code=6}

    ]

    展开全文
  • 列表方式输入语句中的格式修饰符有3个:“:”,“~”,“&”。下面分别介绍这3中修饰符的使用方法。 “:”。当原始数据是以空格为分隔符时,要想对变量值长度不一致的变量规定统一长度必须使用该格式修饰符。规定...

     列表方式输入语句中的格式修饰符有3个:“:”,“~”,“&”。下面分别介绍这3中修饰符的使用方法。

    “:”。当原始数据是以空格为分隔符时,要想对变量值长度不一致的变量规定统一长度必须使用该格式修饰符。规定变量值是从非空格列种读取,直到第一次遇到一下3种情况之一,该变量值的读取过程才算结束。

    l  下一个空格列

    l  达到变量预先设定长度(如果没有设定长度就是sas默认字符长度8B)

    l  数据行结束

    e.g:空格为分隔符时,对变量长度不一致的变量规定统一长度。

    data new;
    	input Univ:$12. plc$ zip;
    	cards;
    		MIT Boston 100023
    		TsinghuaUniv Beijing 100084
    		;
    run;
    

    例中,第一个观测变量Univ的值为MIT(只读3个字符,因遇到空格而结束),第二个观测值为TsinghuaUniv(得到先前定义的变量长度12)。如果只对变量Univ规定长度,而不加格式修饰符(:),在读入第一条记录时就会出错,如果不对Univ规定长度,读入第二条就会只读入Tsinghua,而不是预先要读入的TsinghuaUniv,这是因为SAS默认的字符变量的存储长度就是8B。

    “&”。字符输入值可能包含一个或几个空格。因为空格是列表读入方式默认的分隔符,所以如果要读入的数据值本身包括空格时就必须用此格式符。

    e.g:空格为分隔符时,字符型输入值嵌有空格。

    data user;
    	input name & $12. age;
    	cards;
    	Jiang zhu  20
    	Annie Zheng  31
    	I.Altman  60
    	;
    run;
    

     

    例中,第一个观测name中Jiang Zhu(包含一个空格),第二个观测Annie Zheng(包含一个空格)。分隔符为两个空格。

     

    “~”。规定读入字符时保留引号。此选项只是在infile语句中与选项dsd一起使用时才有效。

    e.g:dsd和“~”的作用,读入字符时保留引号。“~”只在infile语句中跟dsd选项一起使用时才有效。

     

    data topic;
    	infile datalines dsd;
    	input speaker ~ $ 15. title ~ $ 40. location & $ 10. ;
    	datalines;
    	Song, "Credit Derivatives", Room 329
    	Zhu, "Credit Risk Management", Room 406
    	;
    run;
    
    
    

     

    展开全文
  • 1、storyboard与自定义cell方式实现 2、storyboard与自定义xib方式实现 3、代码方式创建 UICollectionView 与 自定义Cell 4、UICollectionViewController方式来实现视图的横向滑动


        人生活在世上只有短短的几十年,却浪费了很多的时间去想许多半年内就会被遗忘的小事。实际上,世界上有的伤心事都是由一些小事引起的,诸如一点小小的伤害、一丝小小的屈辱等等。有意思的是,那些在图书馆、实验室从事研究工作的人很少因忧虑而精神崩溃,因为他们没有时间享受这种奢侈。忧虑最能伤害你的时候,不是在你行动时,而是在你悠闲的时候



    效果展示 :

     




    1、简述 

        这里使用的是UICollectionView来实现的这种效果



    2、storyboard与自定义cell方式实现


    基本实现思路是:使用storyboard布局方式(结合自定义CellView)来实现列表展示数据

    2.1 首先定义storyboard文件中的内容


    在这里,我们在主视图中直接拖入一个UICollcetionView控件,其实它就相当一个容器,同时它会被默认设置一种流水方式的布局格式 UICollectionViewFlowLayout

    在对应的主视图控制器中分别设置 对应的UICollectionView 和UICollcetionViewFlowLayout的引用


    2.2、自定义CellView展示条目 

        创建AppCell.h文件 ,继承于UICollcetionViewCell

        在AppCell.m文件中实现初始化方法

    #import "AppCell.h"
    
    @implementation AppCell
    
    -(instancetype)initWithFrame:(CGRect)frame{
        if (self = [super initWithFrame:frame]) {
            //1、获取Cell的Size
            CGSize cellSize = self.contentView.frame.size;
            //2、添加一个显示标题的Title
            //2.1、创建Label
            UILabel *titleLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, cellSize.width, 20)];
            //2.2、设置默认显示标题
            titleLabel.text=@"神奇的小镇";
            //2.3、添加到Cell中去
            [self.contentView addSubview:titleLabel];
            
            
            //3、添加一个ImageView显示图片
            //3.1、创建ImageView
            UIImageView *imageView =[[UIImageView alloc]initWithFrame:CGRectMake(0,25, cellSize.width, cellSize.height-25)];
            //3.2、设置默认显示的图片
            imageView.image = [UIImage imageNamed:@"aqs"];
            //3.3、添加到Cell中
            [self.contentView addSubview:imageView];
            
        }
        return self;
    }
    

         可以看到在这个自定义的Cell中,添加了一个用于显示图片的UIImageView 和一个用于显示文字标题的UILabel,也就是说当我们的条目内容比较复杂的时候,可以使用这种方式来设置添加


    2.3、设置视图显示 

    #import "ViewController.h"
    #import "AppCell.h"
    
    
    @interface ViewController ()<UICollectionViewDataSource>
    
    //对应storyboard中的UICollcetionView
    @property (weak, nonatomic) IBOutlet UICollectionView *mainCollectionView;
    //对应storyboard中UICollectionView 中的流水布局FlowLayout
    @property (weak, nonatomic) IBOutlet UICollectionViewFlowLayout *mainFlowLayout;
    
    @end
    //重用标识符
    static NSString *ident=@"cell";
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        
    
        //设置代理
        self.mainCollectionView.dataSource = self;
    
        //注册Cell
        [self.mainCollectionView registerClass:[AppCell class] forCellWithReuseIdentifier:ident];
        
        //设置Item的大小
        self.mainFlowLayout.itemSize = CGSizeMake(self.view.frame.size.width-20, 200);
        
    }
    
    //组
    -(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{
        return 1;
    }
    //列
    -(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
        return 30;
    }
    
    //视图
    -(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
        AppCell *cell =[collectionView dequeueReusableCellWithReuseIdentifier:ident forIndexPath:indexPath];
    
        if (cell == nil) {
            cell = [[AppCell alloc]init];
        }
        cell.backgroundColor = [UIColor colorWithRed:248 green:248 blue:248 alpha:1];
        return cell;
    }
    
    
    @end
    


    2.3.1 视图引用

        首先在这里定义声明了mainCollectionView引用 和 mainFlowLayout引用,其分别指向第一步中创建的storyboard文件中的UICollectionView 与UICollectionView中对应的流水布局UICollectionViewFlowLayout 

        每一个UICollectionView必然对应一个布局方式,其指定了UICollectionView中的Item的排列方式

    在这里默认设置了UICollectionViewFlowLayout流水式布局方式 


    2.3.2 UICollectionView的相关设置

        在4.1中我们谈到在storyboard中默认设置了一个流水布局方式,如果我们是在使用代码创建,那么必须定义设置一种布局方式,否则会抛出异常;

    同时也必须将UICollectionView中对应的Cell条目类型进行注册,否则会抛出指定异常

        在上面我们还设置了UICollectionView的条目显示大小 ,如果不进行设置,那么其默认显示大小 为 50 X 50 

    2.3.3 UICollectionView分组支持

        UICollcetionView同时支持分组显示功能 ,与UITableView的功能相似


    3、storyboard与自定义xib方式实现

        使用UICollectionView 与 自定义xib方式来实现的列表展示

        其次这里使用的是storyboard文件方式定义规划的布局


    3.1 自定义条目Cell 对应的XIB文件




        3.1.1  在xib文件中,对应了控制器AppCell

        3.1.2 xib文件中分别设置规划了一个用于显示图片的UIImageView 和一个用于显示图片标题的 UILabel 

        3.1.3  对应的控制器中也设置了相应的控件引用 

    AppCell.h 中

    #import "AppCell.h"
    
    @interface AppCell ()
    @property (weak, nonatomic) IBOutlet UIImageView *imageView;
    @property (weak, nonatomic) IBOutlet UILabel *titleLabel;
    
    @end
    
    @implementation AppCell
    
    - (void)awakeFromNib {
        [super awakeFromNib];
        // Initialization code
    }
    
    -(void)setImagPath:(NSString *)imagPath{
        _imagPath = imagPath;
        //设置ImageView
        self.imageView.image = [UIImage imageNamed:imagPath];
        //设置显示标题
        self.titleLabel.text = @"this is a text";
    }
    
    @end
    

       可以看到在这里重写了imagPath的set方法,也就是说当调用appCell.imagPath时候,会执行到setImagPath方法,在这个方法中就将对应的数据设置显示到对应的控件上。


    3.2 UICollectionView的相关设置 

    #import "ViewController.h"
    #import "AppCell.h"
    
    
    @interface ViewController ()<UICollectionViewDataSource>
    //对应storyboard中的UICollcetionView
    @property (weak, nonatomic) IBOutlet UICollectionView *mainCollcetionView;
    //对应storyboard中UICollectionView 中的流水布局FlowLayout
    @property (weak, nonatomic) IBOutlet UICollectionViewFlowLayout *mainFlowLayout;
    
    @end
    
    //cell重用标识符
    static NSString *ident=@"cell";
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
       
        //设置Item的大小
        self.mainFlowLayout.itemSize = CGSizeMake(self.view.frame.size.width-20, 180);
        
        
        //设置代理
        self.mainCollcetionView.dataSource = self;
        //注册Cell
        UINib *cellNib = [UINib nibWithNibName:@"AppCell" bundle:nil];
        
        [self.mainCollcetionView registerNib:cellNib forCellWithReuseIdentifier:ident];
        
        
    }
    
    //组
    -(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{
        return 1;
    }
    //列
    -(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
        return 30;
    }
    -(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
        
        AppCell *cell =[collectionView dequeueReusableCellWithReuseIdentifier:ident forIndexPath:indexPath];
        
        if (cell == nil) {
            cell = [[AppCell alloc]init];
        }
        //设置背景
        cell.backgroundColor = [UIColor colorWithRed:248 green:248 blue:248 alpha:1];
        //设置显示数据
        cell.imagPath = @"aqs";
        
        return cell;
    }
    
    
    @end

        3.2.1 我们在使用UICollectionView的时候必须要对条目CellView进行注册设置,而在这里,则是先获取对应的UINib,然后再调用UINib对应的方法对其进行注册

        3.2.2 在cellForItemAtIndexPath方法中,我们调用方法 cell.imagPayh 并对其进行赋值操作,会调用到AppCell对应的setImagPath方法,进行对相应的控件进行了赋值操作


    4、代码方式创建 UICollectionView 与 自定义Cell

    这里使用的是代码方式创建 UICollectionView 与 自定义Cell


    4.1 代码方式创建自定义Cell 


    AppCell.h 

    #import <UIKit/UIKit.h>
    
    @interface AppCell : UICollectionViewCell
    
    @end
    
    


    AppCell.m

    #import "AppCell.h"
    
    @implementation AppCell
    -(instancetype)initWithFrame:(CGRect)frame{
        if (self=[super initWithFrame:frame]) {
            //1、获取Cell的Size
            CGSize cellSize = self.contentView.frame.size;
            //2、初始化一个ImageView
            UIImageView *imageView =[[UIImageView alloc]initWithFrame:CGRectMake(0, 0, cellSize.width, cellSize.height-20)];
            //3、设置默认显示图片
            imageView.image = [UIImage imageNamed:@"aqs"];
            //4、将ImageView添加到Cell视图中去
            [self.contentView addSubview:imageView];
            
            //5、创建UILabel显示图片的名称
            UILabel *titleLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, cellSize.height-20, cellSize.width, 20)];
            //6、设置显示默认的文字
            titleLabel.text = @"图片";
            //7、将label添加到Cell中
            [self.contentView addSubview:titleLabel];
        }
        return self;
    }
    
    @end

        需要注意的是,在这里AppCell要继承于UICollectionViewCell

        在initWithFrame方法中初始化相应的控件并设置其布局位置与大小以及默认显示的数据


    4.2 代码方式创建UICollectionView 

        在对应的显示显示页面的控制器中

    #import "ViewController.h"
    #import "AppCell.h"
    
    
    @interface ViewController ()<UICollectionViewDataSource>
    
    @end
    
    //定义Cell重用标识符
    static NSString *ident = @"cell";
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        
        
        //1、实例化一个流水布局
        UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc]init];
        //1-1、设置Cell大小
        flowLayout.itemSize= CGSizeMake(self.view.frame.size.width-30, 100);
        //1-2、设置四周边距
        flowLayout.sectionInset = UIEdgeInsetsMake(10, 15, 10, 15);
        //1-3、设置最小列之间的距离
        flowLayout.minimumLineSpacing = 10;
        //1-4、设置最小行之间的距离
        flowLayout.minimumLineSpacing = 20;
        
        
        
        
        //2、实例化创建一个 UICollectionView
        //UICollectionView必须有一个 flowLayout ,必须在实例化的时候进行设置
        UICollectionView  *collectionView = [[UICollectionView alloc]initWithFrame:self.view.bounds collectionViewLayout:flowLayout];
        //3、设置背景为白色
        collectionView.backgroundColor = [UIColor whiteColor];
        
        //4、设置数据源代理
        collectionView.dataSource = self;
        //添加到视图中
        [self.view addSubview:collectionView];
        //注册Cell视图
        [collectionView registerClass:[AppCell class] forCellWithReuseIdentifier:ident];
    }
    
    
    //组
    -(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{
        return 1;
    }
    //列
    -(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
        return 30;
    }
    //子View
    -(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
       
        AppCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:ident forIndexPath:indexPath];
        
        if (cell==nil) {
            cell = [[AppCell alloc]init];
        }
        
        return cell;
    }
    
    
    @end

        

        4.2.1 值得注意的是每一个UICollectionView 必然对应着一个布局方式 ,也就是说在创建UICollectionView的时候,必须指定相应的布局方式,在这里,我们首先创建了UICollectionViewFlowLayout流水布局方式,然后在后续中指向于UICollcetionView的创建 


        4.2..2 必须要注册UICollectionView 条目中使用到的Cell



    5、UICollectionViewController方式来实现视图的横向滑动





    <图片来源 黑马>


    5.1 主视图对应的storyboard文件中

        5.1.1  在这里,显示视图中直接布局UICollectionViewController,同时指向一个控制器,在控制中设置 UICollectionView 与UICollectionViewFlowLayout的引用


        5.1.2  同时设置其中的Cell ,在这里添加了一个用于显示图片的UIImageView 与显示文字 标识的UILabel ,并设置引用相对应的控制器 





    5.2 自定义条目AppCell 

    AppCell.h 

    #import <UIKit/UIKit.h>
    
    @interface AppCell : UICollectionViewCell
    
    @property(copy,nonatomic) NSString *images;
    @property(copy,nonatomic) NSString *indexs;
    
    @end
    


    AppCell.m

    #import "AppCell.h"
    
    
    @interface AppCell ()
    
    //Cell 中对应显示图片的控件 UIImageView
    @property (weak, nonatomic) IBOutlet UIImageView *image;
    //Cell 中对应显示文字的控件 UILabel
    @property (weak, nonatomic) IBOutlet UILabel *lable;
    
    @end
    
    @implementation CellViewCollectionViewCell
    
    -(void)setImages:(NSString *)images{
        //设置显示图片
        UIImage *image = [UIImage imageNamed:images];
        
        _image.image = image;
    }
    
    -(void)setIndexs:(NSString *)indexs{
        //设置显示对应文字标识 
        _lable.text = indexs;
    }
    
    @end
    

        在这里AppCell继承于UICollectionViewCell,其中定义的 images 与 indexs 分别为Cell对应的图片地址与文字说明


        在AppCell.m中重写images 与 index  的set的方法,当在外界通过点语法来对其进行赋值操作的同时,赋值于控件。


    5.3 主视图对应的控制器

    ViewController.h 

    #import <UIKit/UIKit.h>
    
    @interface ViewController : UICollectionViewController
    
    
    @end
    
    


    ViewController.m

    #import "ViewController.h"
    #import "AppCell.h"
    
    @interface ViewController ()<UICollectionViewDataSource>
    
    //对应视图中的UICollectionView 中的默认流水布局
    @property (weak, nonatomic) IBOutlet UICollectionViewFlowLayout *flowlayout;
    //对应视图中的UICollectionView
    @property (weak, nonatomic) IBOutlet UICollectionView *collectionViews;
    
    //图片路径数据源
    @property(nonatomic,strong) NSArray *dataArray;
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        //设置背景
        self.collectionView.backgroundColor = [UIColor whiteColor];
        //设置大小
        _flowlayout.itemSize = self.view.bounds.size;
        
        //代理
        self.collectionView.dataSource =self;
        
        // 修改滚动方向
        _flowlayout.scrollDirection =  UICollectionViewScrollDirectionHorizontal;
       
        // 设置 行间距
        _flowlayout.minimumLineSpacing = 0;
        
        // 隐藏滚动条
        _collectionViews.showsHorizontalScrollIndicator = NO;
        
        // 设置分页效果
        _collectionViews.pagingEnabled = YES;
        
        // 设置弹簧效果
        _collectionViews.bounces =  NO;
        
    }
    
    -(NSArray *)dataArray{
        if (_dataArray==nil) {
            // 创建临时数组
            NSMutableArray *mutable = [NSMutableArray array];
            // 加载所有图片
            for (int i = 0; i < 9; i++) {
                // 拼接图片名称
                NSString *imageName = [NSString stringWithFormat:@"%d.jpg",i];
                [mutable addObject:imageName];
            }
            
            // 赋值
            _dataArray = mutable;
        }
        return _dataArray;
        
    }
    
    //
    -(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{
        return 1;
    }
    -(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
        return 10;
    }
    -(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
        
        AppCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"aa" forIndexPath:indexPath];
        // 取出图片
        cell.images = self.dataArray[indexPath.item];
        cell.indexs = [NSString stringWithFormat:@"%lu",indexPath.row];
        
        return cell;
    }
    
    
    
    @end
    

        5.3.1 主视图的控制器继承于UICollectionViewController 


        5.3.2 在这里我们设置了UICollectionView的背景颜色为白色,UICollectionView的默认背景颜色是黑色


        5.3.3 同时我们设置了 视图中UICollectionView对应的流水布局相应Item的size为UICollectionView的size,而在这里,UICollectionView为全屏,


        5.3.4 通过设置UICollection的布局UICollectionViewFlowLayout的滚动方式 scrollDirection 为垂直滚动

             UICollectionViewScrollDirectionVertical  为垂直方向滚动,默认方式

             UICollectionViewScrollDirectionHorizontal 为水平方向滚动


        5.3.5 在这里能过设置UICollectionView 的showHorizontalScrollIndicator 的值为NO ,则为不显示水平方向滚动时的滚动条









    展开全文
  •  百度地图上有一个很强大的搜索建议功能,以下拉列表方式展示出来。比如,输入“百度”,下拉列表中就会出现“北京市海淀区百度在线网络技术(北京)有限公司”。这个如何实现呢?让我们一步一步来学习。 ------...

    摘要:

      百度地图上有一个很强大的搜索建议功能,以下拉列表的方式展示出来。比如,输入“百度”,下拉列表中就会出现“北京市海淀区百度在线网络技术(北京)有限公司”。这个如何实现呢?让我们一步一步来学习。

    ------------------------------------------------------------------------------------------------------------------------------------

     

     

    一、suggestion 功能示意图

     

     

    二、suggestion的类参考

    更多类参考,请点击这里:http://dev.baidu.com/wiki/map/index.php?title=Class:%E6%9C%8D%E5%8A%A1%E7%B1%BB/Autocomplete

     

     

    三、实现HTML的结构

     

    写三个框,分别是suggestion的下拉列表、地图容器,和最终信息显示框。

    <div style="margin:50px">请输入:<input type="text" id="suggestId" size="30" value="百度" style="width:300px;" /></div>
    <div id="searchResultPanel" style="border:1px solid #C0C0C0;width:300px;height:600px;position:absolute;left: 650px;top:20px;"></div>
    <div id="container"></div>



    四、suggestion的使用

    首先,创建一个自动完成的对象。

    其中,suggestId就是输入框的id,通过它,能获取到用户输入了什么。

    onSearchComplete是搜索到结果后的回调函数,可以不用设置。

    var ac = new BMap.Autocomplete(    //建立一个自动完成的对象
    {"input" : "suggestId"
    ,"location" : map
    });

     

     

    根据类参考,suggestion有如下事件。分别可以控制,鼠标在下拉列表上的选择(类似onfouce),和点击确定下拉列表的选项。

     

    我们设置当鼠标在下拉列表上,和点击下拉列表后,都会在右边的信息展示框,展示结果数据。

    复制代码
    ac.addEventListener("onhighlight", function(e) {  //鼠标放在下拉列表上的事件
    var str = "";
    var _value = e.fromitem.value;
    var value = "";
    if (e.fromitem.index > -1) {
    value = _value.province + _value.city + _value.district + _value.street + _value.business;
    }
    str = "FromItem<br />index = " + e.fromitem.index + "<br />value = " + value;

    value = "";
    if (e.toitem.index > -1) {
    _value = e.toitem.value;
    value = _value.province + _value.city + _value.district + _value.street + _value.business;
    }
    str += "<br />ToItem<br />index = " + e.toitem.index + "<br />value = " + value;
    G("searchResultPanel").innerHTML = str;
    });

    ac.addEventListener("onconfirm", function(e) { //鼠标点击下拉列表后的事件
    var _value = e.item.value;
    var myValue = _value.province + _value.city + _value.district + _value.street + _value.business
    G("searchResultPanel").innerHTML = "onconfirm<br />index = " + e.item.index + "<br />myValue = " + myValue;

    });
    复制代码



     

    五、通过地址解析设置中心点

    由于suggestion返回的是地址数据,并没有point经纬度的信息。我们需要自己在回调函数,或者其他地方通过地址解析来打点。

    复制代码
    function setPlace(){// 创建地址解析器实例
    var myGeo = new BMap.Geocoder();// 将地址解析结果显示在地图上,并调整地图视野
    myGeo.getPoint(myValue, function(point){
    if (point) {
    map.centerAndZoom(point, 16);
    map.addOverlay(new BMap.Marker(point));
    }
    }, "北京");
    }
    复制代码

     

     

    加上地址解析之后,能通过获得的地址位置的描述,得到百度经纬度point。随后,添加一个marker覆盖物,即可完成打点工作。最后再把地图中心点设置为point。

     

     

    六、备注

    这个教程是一个最简单的示例,方便大家学习和上手。

    由于没有设置城市,该示例只适用于北京市内。详细的城市设定,请看类参考:

     

     

    七、全部源代码

    复制代码
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
    <title>自动提示</title>
    <script type="text/javascript" src="http://api.map.baidu.com/api?v=1.2"></script>
    <style type="text/css">
    body
    {font-size:13px;margin:0px}
    #container
    {width:600px;height:400px}
    .label
    {margin-left:20px;font-weight:bold;font-size:14px}
    </style>
    </head>
    <body>
    <div style="margin:50px">请输入:<input type="text" id="suggestId" size="30" value="百度" style="width:300px;" /></div>
    <div id="searchResultPanel" style="border:1px solid #C0C0C0;width:300px;height:600px;position:absolute;left: 650px;top:20px;"></div>
    <div id="container"></div>
    <script type="text/javascript">
    function G(id) {
    return document.getElementById(id);
    }

    var map = new BMap.Map("container");
    var point = new BMap.Point(116.3964,39.9093);
    map.centerAndZoom(point,
    13);
    map.enableScrollWheelZoom();

    var ac = new BMap.Autocomplete( //建立一个自动完成的对象
    {"input" : "suggestId"
    ,
    "location" : map
    });

    ac.addEventListener(
    "onhighlight", function(e) { //鼠标放在下拉列表上的事件
    var str = "";
    var _value = e.fromitem.value;
    var value = "";
    if (e.fromitem.index > -1) {
    value
    = _value.province + _value.city + _value.district + _value.street + _value.business;
    }
    str
    = "FromItem<br />index = " + e.fromitem.index + "<br />value = " + value;

    value
    = "";
    if (e.toitem.index > -1) {
    _value
    = e.toitem.value;
    value
    = _value.province + _value.city + _value.district + _value.street + _value.business;
    }
    str
    += "<br />ToItem<br />index = " + e.toitem.index + "<br />value = " + value;
    G(
    "searchResultPanel").innerHTML = str;
    });

    var myValue;
    ac.addEventListener(
    "onconfirm", function(e) { //鼠标点击下拉列表后的事件
    var _value = e.item.value;
    myValue
    = _value.province + _value.city + _value.district + _value.street + _value.business;
    G(
    "searchResultPanel").innerHTML ="onconfirm<br />index = " + e.item.index + "<br />myValue = " + myValue;

    setPlace();
    });

    function setPlace(){// 创建地址解析器实例
    var myGeo = new BMap.Geocoder();// 将地址解析结果显示在地图上,并调整地图视野
    myGeo.getPoint(myValue, function(point){
    if (point) {
    map.centerAndZoom(point,
    16);
    map.addOverlay(
    new BMap.Marker(point));
    }
    },
    "北京");
    }
    </script>
    </body>
    </html>

    展开全文
  • 新建一个与数据库表同名的类,get set方法 定义列表Student对象返回数据
  • 使用dl,dt,dd替代传统的table布局 -dl dt dd表格 dl,dt,dd{ margin:0; background:#fff5fa; font-size:14px; } dl{ margin:0 auto; width:50%; border:1px solid #f8b3d0;... border-bottom
  • 清理打开方式列表

    千次阅读 2019-01-01 17:19:29
    清理打开方式列表 打开注册表 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts.想要清理的扩展名\OpenWithList 例:此项要删除chrome 把D项删除即可 ...
  • 列表是有序可变的元素集合,列表可以嵌套,即列表里面的元素可以是列表,此外列表中的元素数据类型可以不一致,列表的定义方式有三种,如下所示,以下代码的运行环境是Python3. # 列表的定义 # 方式1:对于规模...
  • 思考一个问题,list1=[1,2,3] list2=[4,5...方式1:循环访问两个列表方式2:通过Python中map函数的方式方式3:在学习CNN结构的时候,遇见了feature map 的连接问题,涉及到了Element-wise addition的连接方式和conc...
  • python中二维列表的遍历方式

    万次阅读 多人点赞 2018-05-23 17:06:41
    第一种方式:类似于MATLAB中的二维数据索引,比较直观,容易理解list2d = [[1,2,3],[4,5,6]] sum = 0 for i in range(len(list2d)): for j in range(len(list2d[0])): sum += list2d[i][j] print(sum)首先,定义了一个...
  • 用JS实现点击列表弹出列表索引的两种方式方式一,使用利用事件冒泡委托给列表的父节点去处理的方式:代码如下:  方式一,使用利用事件冒泡委托给列表的父节点去处理的方式:    代码如下: var ulObj = ...
  • Python 列表逆序排列的 3 种方式

    万次阅读 2019-03-14 16:09:21
    1. 列表元素逆序排列 list.reverse() list.reverse() 方法,会直接在原来的列表里面将元素进行逆序排列,不需要创建新的副本用于存储结果,不需要重新申请空间来保存最后的结果,但是修改了原来的数据。 ...
  • 只知道可以通过c=a+b或者extend的方式。因为受到了列表推导双for的误导,我一直考虑通过两个for循环的列表嵌套来解决这个问题。后来发现,列表推导完全可以实现对外部变量的修改。 下面是一个举例a = [1,2,3,3
  • flutter两种写下拉列表方式

    千次阅读 2020-12-25 16:05:15
    个人认为第一种好看,但是两种方式都不能更改‘专业列表’部分背景颜色,让我很头疼 第一种:ExpansionTile class ExpansionTileDemo extends StatelessWidget { @override Widget build(BuildContext context) ...
  • Python 列表嵌套多种实现方式

    千次阅读 2018-08-08 14:00:35
    Python 列表嵌套多种实现方式 #coding=utf-8 list=[] for i in range(1,101): list.append(i) # print(list) tempList=[] newList=[] while True: num=0 for temp in list: tempList.append(temp) ...
  • python列表的添加的四种方式

    千次阅读 2020-10-28 19:55:12
    python中列表增加元素有四种方式: append():在列表末尾添加一个元素 extend():在列表末尾添加至少一个元素 insert():在列表任意位置添加一个元素 切片:在列表任意位置添加至少一个元素 1.1 append() 在列表...
  • 25. Python 创建列表的4种方式

    千次阅读 2020-03-17 23:48:10
    25. Python 创建列表的4种方式
  • 列表的常用方法如下图所示 append()方法示例如下: >>> a=[20,40] >>> a.append(80) >>> a [20, 40, 80] +运算符操作方法(不建议使用) >>> a=[20,40] >>&...
  • List Control列表对齐方式设置

    千次阅读 2017-05-26 10:23:07
    在CDSN中查CListCtrl,找到函数 CListCtrl::InsertColumn //在列表视图控件中插入新列。 int InsertColumn( int nCol, const LVCOLUMN* pColumn); int InsertColumn( int nCol, LPCTSTR ...
  • Python创建列表的4种方式

    万次阅读 多人点赞 2019-08-30 15:28:18
    print(a) #结果,创建空的列表 [] b = [1,2,"abc"] print(b) #结果:[1, 2, 'abc'] print(b[2]) #结果:abc 二、list()创建 c = list() print(c) #结果:创建一个空的列表 c.append(1) print(c) #结果:[1] c ...
  • C# ListBox列表赋值的两种方式

    千次阅读 2019-08-08 21:34:57
    C# ListBox列表赋值 C#中ListBox控件常用来显示列表信息,如显示指定文件夹下所有文件的路径等。 ListBox控件绑定数据的两种方式方式一:为ListBox控件逐一添加数据项 DirectoryInfo dir = new DirectoryInfo...
  • 用list列表以行方式创建DataFrame

    千次阅读 2020-04-18 22:58:56
    用list列表以行方式创建DataFrame DataFrame默认会将一维list作为列处理,需要将一维list转为二维才能实现想要的效果。 a=[1,2,3,4,5] 直接pd.DataFrame(a)得到的是一个1列5行的df,正确方式是: pd.DataFrame([a]) ...
  • python 打印列表元素In this program – we are going to learn how can we print all list elements, print specific elements, print a range of the elements, print list multiple times (using * operator), ...
  • QQ好友列表树形列表简单实现方式

    万次阅读 2013-12-06 16:33:16
     核心部分是前面两个类,注意,第二个类的布局方式不能为空,否则不能是容器显示滚动条,这是实现这个面板功能的一个难题,因为我不怎么会使用其他的布局方式,就只经常用空布局,经过这次才知道,光用空布局是不行...
  • 效果请看:链接 代码请看:链接 问题: 在H5的移动端开发中,经常会遇到类似瀑布流的布局,近期做了一下总结。 大致有三种实现方式: ...实例,在工作中,我们会用到视频列表,UI如下: 1、 css3实现
  • key_value_to_list = list(zip(key_list, value_list)) # 转换为列表 print(key_value_to_list) key_value_tuple = tuple(zip(key_list, value_list)) # 转换为元组 print(key_value_tuple) 运行结果: {'a':...
  • python列表元素的5种添加方式

    万次阅读 2018-11-12 16:38:56
    列表元素的增加和删除 当列表增加和删除元素时,列表会自动进行内存管理,大大减少程序员的负担,但是 这个特点实际列表元素的大量移动,效率较低,除非必要,我们一般只下列表的尾部 天骄或者删除元素,这会大大...
  • R 生成列表的两种方式

    千次阅读 2018-10-19 16:05:59
    第一种方法,直接用list() 函数生成列表 #method one a &lt;- "my first list" b &lt;- 1:3 c &lt;- matrix(0, ncol=3,nrow=4) mylist &lt;- list(name=a, other=b,c) 第二种方法 先生...
  • Python 让列表逆序排列的 3 种方式

    万次阅读 2019-06-05 15:40:30
    而在 Python 中,将列表逆序有 3 种方式,下面将逐一讨论。 当然,这里说的 3 种方式指的是使用 Python 的内建模块的方法,不使用第三方的方法,包括你自己可能会写的循环等。 假设我们现在有这么...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 58,155
精华内容 23,262
关键字:

列表方式