• IOS课程表Demo

    2020-07-14 23:30:30
    一个简易的IOS课程表demo,希望能帮到他人
  • iOS课程表demo

    2020-05-17 10:39:57
    很简单的小程序,是一个课程表界面,适合新手,
  • iOS的GridView表格视图的实现

    本文将介绍以及讲解GridView(网格视图的实现)

    文中所解析的例子已封装成控件
    地址JiaHongXu/JHGridView 欢迎指正和Star~
    先上一个实现的截图

    GridView实现截图(课程表)

    准备阶段

    前因

    这个项目是前段时间在老师实验室接到的一个公司的协助开发项目,这是一个家校互通的软件,里面有一个功能是需要查看课程表,然而又不希望实现像超级课程表那样的表格视图,于是手动封装了一个GridView以满足需求。

    分析

    需要实现的GridView需要有如下的功能:
    - 背景色和文字颜色可指定,允许指定某行某列的颜色
    - 不同行的行高和列宽可以不同
    - 可相应点击事件,点击某行某列需要作出回应(该需求中为点击课程表中的某个课程要弹出输入框,以修改课程名称)
    - 表格可滑动,上下或左右滑动(即contentSize能超出当前View的大小)
    - 担心产品经理改动需求,表头(星期一、星期二那行)是否可以跟随下面的表格一起上下滚动,是否固定
    - 同样也是预防改需求,提前做好文本对齐方式的修改预留

    思考实现

    • 如果使用UICollectionView实现的话,难以指定某行某列(UICollectionView的行中item个数是由item宽度计算得出,如需指定一行有几个item需要自己手动限制item大小),因此考虑使用UITableView实现
    • 由于需要考虑表头行是否与表格主体内容一起滚动,因此分离表头与主体内容,主体内容使用若干个UITableView构成,表头使用UIView横向嵌套几个UILabel组成
    • 需要定制好多东西,例如对其方式、字体颜色、背景颜色、字体大小、行高列宽等,考虑使用代理方法交由使用者指定,点击事件可以通过获取UITableView的代理方法,稍作处理然后交由使用者使用。
    • 剩下就是如何对网格视图GridView中的每个item赋值的问题,想过两个解决方案,第一个是通过代理方法,让用户实现一个返回表格主体每行每列的NSString和实现一个返回表头每列的NSString这两个方法,另外一个是直接通过传入model,然后通过KVC赋值,考虑用户使用方便,我选择了第二种

    用到的知识

    基本没啥,主要把去年暑假学的KVC拿来练一下手,顺便复习一下代理方法的写法以及基本控件的使用,UITableViewcontentSize相关知识以及一些OC的知识,剩下的就是比较繁琐的封装了


    代码实现

    定义的枚举类型和结构体

    //use for representing the location in gridview
    typedef struct GridIndex {
        long row;
        long col;
    } GridIndex;
    
    //use for specifing the selection type
    typedef enum{
        JHGridSelectTypeNone,       //default, none selection can be seen
        JHGridSelectTypeDefault,    //when click on an item, the whole line will be selected also
        JHGridSelectTypeSingle,     //only select the clicked item
    }JHGridSelectType;
    
    //use for specifing the alignment type
    typedef enum{
        JHGridAlignmentTypeDefault, //center alignment
        JHGridAlignmentTypeLeft,    //left alignment
        JHGridAlignmentTypeRight,   //right alignment
    }JHGridAlignmentType;

    分别是用于表示位置坐标的GridIndex(类似NSIndexPath),用于表示选择样式的JHGridSelectType和用于表示对齐方式的JHGridAlignmentType

    可实现的代理方法

    @protocol JHGridViewDelegate<NSObject>
    
    @optional
    - (CGFloat)heightForRowAtIndex:(long)index;
    @optional
    - (CGFloat)widthForColAtIndex:(long)index;
    @optional
    - (CGFloat)heightForTitles;
    @optional
    - (BOOL)isTitleFixed;
    @optional
    - (void)didSelectRowAtGridIndex:(GridIndex)gridIndex;
    @optional
    - (JHGridSelectType)gridViewSelectType;
    @optional
    - (JHGridAlignmentType)gridViewAlignmentType;
    @optional
    - (UIColor *)backgroundColorForTitleAtIndex:(long)index;
    @optional
    - (UIColor *)backgroundColorForGridAtGridIndex:(GridIndex)gridIndex;
    @optional
    - (UIColor *)textColorForTitleAtIndex:(long)index;
    @optional
    - (UIColor *)textColorForGridAtGridIndex:(GridIndex)gridIndex;
    @optional
    - (UIFont *)fontForTitleAtIndex:(long)index;
    @optional
    - (UIFont *)fontForGridAtGridIndex:(GridIndex)gridIndex;
    @end

    其中比较常用的有

    - (void)didSelectRowAtGridIndex:(GridIndex)gridIndex;

    用于处理表格元素被选中的事件

    - (BOOL)isTitleFixed;

    用于表示标题栏是否固定,默认为NO

    JHGridView的方法

    //init methods
    - (instancetype)initWithFrame:(CGRect)frame;
    
    //call this methods to load the gridview
    - (void)setTitles:(NSArray<NSString *> *)titles andObjects:(NSArray *)objects withTags:(NSArray<NSString *> *)tags;

    第二个方法在需要显示数据的时候调用,传入一个标题(表头行)的NSString数组,一堆需要显示用的数据的model数组,以及每一列对应model中属性名称的NSString数组(用于KVC赋值)

    构造表格

    构造表头,思路是一个UIView横向嵌套若干个UILabel

    //setup titles
    float offsetX = 0;
    for (long i = 0; i < _titles.count; i++) {
        gridWidth = [self widthForColAtIndex:i];
        CGRect frame = CGRectMake(offsetX, 0, gridWidth, titleHeight);
        offsetX += gridWidth;
        UIView *titleView = [[UIView alloc] initWithFrame:frame];
        titleView.layer.borderWidth = 0.5;
        titleView.layer.borderColor = [[UIColor groupTableViewBackgroundColor] CGColor];
        titleView.backgroundColor = [self backgroundColorForTitleAtIndex:i];
        UILabel *titleLbl = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, frame.size.height)];
        titleLbl.text = [_titles objectAtIndex:i];
        titleLbl.textColor = [self textColorForTitleAtIndex:i];
        [titleLbl setFont:[self fontSizeForTitleAtIndex:i]];
        [self applyAlignmentTypeFor:titleLbl];
        [titleView addSubview:titleLbl];
        [_backTitleScrollView addSubview:titleView];
    }

    构造表格主体,通过一个UIScrollView嵌套若干个UITableView实现,其中,如果title不固定,需要把titleView也给addscrollViewsubview中去

    //setup tables
    float offsetX = 0;
    for (long i = 0; i < titleNum; i++) {
        CGRect frame = CGRectZero;
        gridWidth = [self widthForColAtIndex:i];
        if ([self isTitleFixed]) {
            frame = CGRectMake(offsetX, 0, gridWidth, tableHeight);
        }else{
            frame = CGRectMake(offsetX, [self heightForTitles], gridWidth, tableHeight);
        }
        offsetX += gridWidth;
        UITableView *tableView = [[UITableView alloc] initWithFrame:frame style:UITableViewStylePlain];
        tableView.layer.borderWidth = 0.5;
        tableView.layer.borderColor = [[UIColor groupTableViewBackgroundColor] CGColor];
        tableView.separatorInset = UIEdgeInsetsMake(0, 0, 0, 0);
        tableView.scrollEnabled = NO;
        tableView.tag = i;
        tableView.delegate = self;
        tableView.dataSource = self;
        [_backScrollView addSubview:tableView];
    }

    其中,需要手动指定UIScrollViewcontentSize,分两种情况:title固定(不随表格体上下滚动而滚动)以及title不固定(随表格体上下滚动而滚动)

    //setup scrollview's content size
    float contentWidth = tableWidth;
    float contentHeight = [self isTitleFixed]?tableHeight:tableHeight + [self heightForTitles];
    [_backScrollView setContentSize:CGSizeMake(contentWidth, [self isTitleFixed]?tableHeight:contentHeight)];

    最后,由于当表格主体发生横向滚动时,表头也需要横向滚动相同的距离,因此需要设置联动,通过实现scrollViewDidScroll:方法来捕获并处理scrollview的滚动事件

    #pragma mark --Self ScrollView Delegate Methods
    - (void)scrollViewDidScroll:(UIScrollView *)scrollView{
        if ([scrollView isEqual:_backTitleScrollView]) {
            CGPoint offset = _backScrollView.contentOffset;
            offset.x = _backTitleScrollView.contentOffset.x;
            [_backScrollView setContentOffset:offset];
        }else{
            CGPoint offset = _backTitleScrollView.contentOffset;
            offset.x = _backScrollView.contentOffset.x;
            [_backTitleScrollView setContentOffset:offset];
        }
    }

    使用Demo

    使用该控件时把JHGridView目录拖入工程
    如果不需要指定颜色、字体大小、行高列宽以及处理选中事件的可以不实现代理方法

    #import "JHGridView.h"
    @interface ViewController ()<JHGridViewDelegate>

    初始化并赋值

    JHGridView *gridView = [[JHGridView alloc] initWithFrame:
                            CGRectMake(0, 64, self.view.frame.size.width, 300)];
    gridView.delegate = self;
    NSArray *array = @[
                       [[TestObject alloc] initWithName:@"aaa" Sex:@"11" Number:@"ooo" Address:@"sdfabfsakjbakf" Birthday:@"1996-01-01"],
                       [[TestObject alloc] initWithName:@"aaa" Sex:@"11" Number:@"ooo" Address:@"sdfabfsakjbakf" Birthday:@"1996-01-02"],
                       [[TestObject alloc] initWithName:@"aaa" Sex:@"11" Number:@"ooo" Address:@"sdfabfsakjbakf" Birthday:@"1996-01-03"],
                       [[TestObject alloc] initWithName:@"aaa" Sex:@"11" Number:@"ooo" Address:@"sdfabfsakjbakf" Birthday:@"1996-01-04"],
                       [[TestObject alloc] initWithName:@"aaa" Sex:@"11" Number:@"ooo" Address:@"sdfabfsakjbakf" Birthday:@"1996-01-05"],
                       [[TestObject alloc] initWithName:@"aaa" Sex:@"11" Number:@"ooo" Address:@"sdfabfsakjbakf" Birthday:@"1996-01-06"],
                       [[TestObject alloc] initWithName:@"aaa" Sex:@"11" Number:@"ooo" Address:@"sdfabfsakjbakf" Birthday:@"1996-01-07"],
                       [[TestObject alloc] initWithName:@"aaa" Sex:@"11" Number:@"ooo" Address:@"sdfabfsakjbakf" Birthday:@"1996-01-08"],
                       [[TestObject alloc] initWithName:@"aaa" Sex:@"11" Number:@"ooo" Address:@"sdfabfsakjbakf" Birthday:@"1996-01-09"],
                       [[TestObject alloc] initWithName:@"aaa" Sex:@"11" Number:@"ooo" Address:@"sdfabfsakjbakf" Birthday:@"1996-01-10"],
                       [[TestObject alloc] initWithName:@"aaa" Sex:@"11" Number:@"ooo" Address:@"sdfabfsakjbakf" Birthday:@"1996-01-11"]];
    [gridView setTitles:@[@"NAME",
                          @"SEX",
                          @"PHONE",
                          @"ADDRESS",
                          @"BIRTHDAY"]
             andObjects:array withTags:@[@"name",@"sex",@"number",@"address",@"birthday"]];
    [self.view addSubview:gridView];

    如果需要自定义,则实现代理方法

    - (void)didSelectRowAtGridIndex:(GridIndex)gridIndex{
        NSLog(@"selected at\ncol:%ld -- row:%ld", gridIndex.col, gridIndex.row);
    }
    
    - (BOOL)isTitleFixed{
        return YES;
    }
    
    - (CGFloat)widthForColAtIndex:(long)index{
        if (index==3||index==4) {
            return 120;
        }else{
            return 90;
        }
    }
    
    - (UIColor *)backgroundColorForTitleAtIndex:(long)index{
        return [UIColor colorWithRed:229/255.0 green:114/255.0 blue:30/255.0 alpha:1];
    }
    
    - (UIColor *)backgroundColorForGridAtGridIndex:(GridIndex)gridIndex{
        if (gridIndex.row == 2) {
            return [UIColor cyanColor];
        }else if (gridIndex.col == 4){
            return [UIColor yellowColor];
        }else{
            return [UIColor whiteColor];
        }
    }
    
    - (UIColor *)textColorForTitleAtIndex:(long)index{
        if (index==1) {
            return [UIColor whiteColor];
        }else{
            return [UIColor blackColor];
        }
    }
    
    - (UIColor *)textColorForGridAtGridIndex:(GridIndex)gridIndex{
        if (gridIndex.col == 1) {
            return [UIColor blueColor];
        }else{
            return [UIColor blackColor];
        }
    }
    
    - (UIFont *)fontForTitleAtIndex:(long)index{
        return [UIFont systemFontOfSize:20];
    }

    运行效果
    Demo运行截图

    完整代码已上传至我的Github JiaHongXu/JHGridView 欢迎指正和Star✨~
    学生党一枚,以上为本人学习中的练习,若有不足还请各看官大牛指出~
    谢谢~~~(づ ̄3 ̄)づ╭❤~

    展开全文
  • 总结了一些常用的demo,包括获取验证码、AVPlayer、AFNetworking、Masnory、高仿微信、高仿网易、K线图、折线图、柱状图、手势解锁、TouchID、直播、动画等,大家可以根据需要自取,大部分都是来自GitHub。

    总结了一些常用的demo,包括获取验证码、AVPlayer、AFNetworking、Masnory、高仿微信、高仿网易、K线图、折线图、柱状图、手势解锁、TouchID、直播、动画等,大家可以根据需要自取,大部分都是来自GitHub。

    1、获取验证码 http://download.csdn.net/detail/zyq527758142/9852547
    2、接口调试工具Get,Post http://download.csdn.net/detail/zyq527758142/9852550 (windows平台)http://download.csdn.net/detail/zyq527758142/9237763(mac平台)
    3、京东无线服务端架构演进历程-赵云霄http://blog.csdn.net/lz0426001/article/details/51441606
    4、个性化应用实践:AWS IoT平台 + Amazon Alexa语音技术-吴宗承http://download.csdn.net/detail/zyq527758142/9849359
    5、基于AVPlayer的封装. https://github.com/renzifeng/ZFPlayer
    https://github.com/kingly09/KYVedioPlayer
    6、可以编辑相册中的图片https://github.com/gang544043963/LGPhotoBrowser
    7、酷炫cell效果https://github.com/GQuEen/GGTableViewCell
    8、酷炫广告动画页面展示
    9、录音封装,直接拿来用https://github.com/gitkong/FLAudioServices
    10、滤镜Demo https://github.com/wangyingbo/YBPasterImage

    11、拍照滤镜效果https://github.com/FLYang95/PhotosShow
    12、蘑菇街https://github.com/lingsuiderongyan/mogujie
    13、淘宝购物https://github.com/EleTeam/Shop-iOS
    14、淘宝购物服务端https://github.com/EleTeam/Shop-PHP-Yii2
    15、模仿微信键盘https://github.com/bbbcode/KeyboardforChat
    https://github.com/1170197998/QQ-WeChatKeyboard
    16、随机键盘自定义https://github.com/Bruce-7/SafeframeDemo
    17、牛逼K线图https://github.com/WillkYang/Y_KLine
    https://github.com/WillkYang/YYStock
    18、实时折线图的绘制https://github.com/jiangbin1993/DrawLineChart
    19、折线图https://github.com/SeJasonWang/SCChart
    20、柱状图https://github.com/Zirkfied/ZFChart

    21、喷枪打字动画游戏https://github.com/kunlingyijia/PenQiangDaZi
    22、屏幕切换https://github.com/JR-Dun/iOSRotationScreen
    23、屏幕数字密码https://github.com/dawnnnnn/DNPayAlertView
    24、瀑布流左右上下滚动https://github.com/Huanhoo/HHHorizontalPagingView
    25、企业应用架构模式http://download.csdn.net/detail/zyq527758142/9870312
    26、省市县三级选择demo及json文件https://github.com/cloudorz/areapicker
    http://download.csdn.net/detail/zyq527758142/9870315
    27、手势解锁https://github.com/iosdeveloperpanc/PCGestureUnlock
    28、首页指引页https://github.com/dingding3w/DHGuidePageHUD
    29、苏宁易购https://github.com/steerforth/suNingYiGou
    30、图片的二维码https://github.com/XueSeason/Generate-QRCode-BarCode-iOS

    31、图文瀑布流https://github.com/PZXforXcode/PZXWaterflowLayout
    32、网易云音乐https://github.com/xiaobaiso/NetMusic
    33、微信(高仿) https://github.com/nacker/LZEasemob3
    34、无线密码破解一篇通https://wenku.baidu.com/view/f1033b46a8956bec0975e3fa.html
    35、五星评分https://github.com/g763007297/GQRatingView
    36、相机选择保存照片功能https://github.com/XZTLLQ/LQPhotoPickerDemo
    37、选择图片https://github.com/banchichen/TZImagePickerController
    38、iOS教学/各类知识点总结https://github.com/BigShow1949/BigShow1949
    39、映客直播https://github.com/ChinaArJun/Tencent-NOW
    40、战旗TV https://github.com/huangjianguohjg/ZhanQi

    41、直播项目https://github.com/SunLiner/MiaowShow
    42、指纹验证https://github.com/greezi/TDTouchID
    43、重构:改善既有代码的设计http://download.csdn.net/detail/zaiduxinling/6626117
    44、转场动画https://github.com/alanwangmodify/WXSTransition
    45、自定义键盘https://github.com/bbbcode/KeyboardforChat
    46、自定义流水布局https://github.com/Tuberose621/-CollectionViewLayout-CollectionViewFlowLayout-
    47、自定义拍照https://github.com/wubianxiaoxian/SKFCamerademo
    48、仿喜马拉雅https://github.com/Eastwu5788/XMLYFM
    49、3D Touch(swift) https://github.com/itjhDev/itjh_3DTouch
    50、3D Touch https://github.com/versluis/3D-Touch

    51、cell的移动、删除、添加https://github.com/wangningsai/TableViewOperation
    52、IMText https://github.com/jagadeesheie/IMTextView
    53、JianSan-Wallpaper https://github.com/6ag/JianSan-Wallpaper
    https://github.com/6ag/jiansan-swift
    54、json数据解析模型 https://github.com/jsonmodel/jsonmodel
    55、PocketFood-master https://github.com/ljunb/PocketFood
    56、QQ拖拽 https://github.com/netyouli/WHC_-ContainerView
    57、QQ音乐 https://github.com/PengfeiWang666/WPFMusicPlayer
    58、百思不得姐 https://github.com/targetcloud/baisibudejie
    https://github.com/chatwyn/WBBaiSiDemo
    59、TextField抖动效果、toast提示语 https://github.com/fangzhiyuan/textField
    60、支持多选、选原图和视频的图片选择器 https://github.com/banchichen/TZImagePickerController

    61、仿QQ左边菜单侧滑栏 https://github.com/yuyedaidao/YQSlideMenuControllerDemo
    62、ZhouSmallDay https://github.com/Yanemperor/ZhouSmallDay
    63、爱鲜蜂项目 https://github.com/ChinaArJun/loveFreshPeakApp_oc
    https://github.com/shaoyanglichao01/LoveFreshBeen
    64、标签动画 https://github.com/wangyingbo/YBTagView
    65、AFNetworking封装 https://github.com/jkpang/PPNetworkHelper
    https://github.com/boai/BANetManager
    66、时间选择器https://github.com/huzhiqin/HZQDatePickerView
    67、弹出输入框https://github.com/wozyao/ZYInputAlert
    68、多图文浏览器 https://github.com/g763007297/ImageViewer
    69、动画菜单 https://github.com/KittenYang/KYShareMenu
    70、仿QQ列表好友层级https://github.com/zhengwenming/ExpandTableView

    71、仿微信下拉刷新https://github.com/iOSerXuebiao/CAShapeLayerDemo
    72、仿京东下拉动画刷新https://github.com/KenenCS/JDRefresh
    73、仿天猫首页刷新效果导航栏颜色渐变效果https://github.com/tion126/refreshByFrame
    74、仿网易云音乐升级版https://github.com/xiaobaiso/NetMusic
    75、更好用的仿微信、QQ弹框控件https://github.com/theSkyOfJune/HHPopController
    76、飞机大战游戏https://github.com/Demaxiya123/Lyx_PlaneWar
    77、音乐播放器,实现列表,歌词进度展示,锁屏歌词展示等https://github.com/DeveloperLY/MusicPlayer
    78、高仿时光记账本https://github.com/lhz684/Suishouji
    79、国际化教程http://www.cocoachina.com/bbs/read.php?tid=149950
    80、自动布局https://github.com/SnapKit/Masonry
    https://github.com/gsdios/SDAutoLayout
    https://github.com/youngsoft/MyLinearLayout

    81、环形菜单标签https://github.com/hhgz9527/CircleMenu

    展开全文
  • iOS课程表

    2015-07-24 22:22:01
    iOS下课功能的实现

    最近在做课程表,刚开始的时候完全不知道那个周课表的网格是怎么实现的有木有,各种查资料,寻思路,只找到一个安卓版的。没事,咱要的是思路而已。可能思路不是最优的,但还是总结一下,也希望能给其他人一点思路。

    思路

    周课表,就是显示一周内的课程信息,底部本来用的是UILabel然后加上边框色,做成的格子效果,然后看起来不太好看,换成了UIImageView,给一个‘十’字效果。然后,上面再加上半透明的UILabel,显示课程信息即可,当然如果要加上点击事件,那显示信息的UILabel最好换成UIButton。

    总结一下就是UIScrollView上添加多个UIImageView,做出格子效果,然后再在上面添加UILabel,显示课程信息。

    日课表,就简单多了,用UITableView来实现即可。UIScrollView上添加多个可以横向滚动的UITableView。

    单个周视图和日视图的实现思路介绍完了,总体思路是UIView上先添加一张背景视图UIImageView,然后再加上一个日视图(由一个显示日期和周几的头部视图UIView加上一个横向滚动UIScrollView组成的)和一个周视图(由一个显示日期和周几的头部视图和纵向滚动的UIScrollView组成)组成。

    导航栏上的标题自定义一个按钮,点击后整个课程视图下移显示选择周的视图。然后再加上一些好看的动画。

                 


    Demo的地址在这里,这里

    展开全文
  • 前言  先上效果图: ...  搜索了一番后发现了这篇博客:又到了每年此刻,教你把课程表导入日历  遂转载,并附上一点自己操作过程中遇到的问题以及解决。以下为转载内容  今天学校公布了我们下学期的课程表。唉

    前言

      先上效果图:

    watch.png

    watch2.png

      一直苦于每次要看课表的时候,先得掏出手机,然后亮屏,手指滑动几下才能看到自己的课程信息,想到了如果可以把课表信息导入Apple Watch的话就可以很方便了,可是又没有可以用的APP,于是想到了日历。

      搜索了一番后发现了这篇博客:又到了每年此刻,教你把课程表导入日历

      遂转载,并附上一点自己操作过程中遇到的问题以及解决。

    以下为转载内容

      今天学校公布了我们下学期的课程表。唉,没想到大三的课程表居然比大二还多!好吧,我也只能乖乖地把课程表整理下,一起导入到日历里。

      其实 App Store 里课程表的应用并不少,各个学校也可能有自己的教务系统爬下来做出来的课程助手,所以管理课程这件事并不是难事。但是谁叫我生来(才怪)就是不喜欢这样一些乱七八糟功能堆积的 App,反而享受做出符合自己需求的玩意儿。所以别企图用 XX 课程助手这样的应用来搞定我。

    将课程表导入到日历管理的好处十分明显:

    • 统一管理。将课程和其他安排统一管理,方便安排和查看
    • 节省空间。在 Widget 里只需要留一个日历插件,就能一目了然
    • 足够装X。嗯……是的。

    效果.jpg

      于是我写了一个将课程导入日历的 Python 脚本,这个脚本是我一年前写的,一直想分享但是一直找不到点拿出来分享,今天心情好(才怪),觉得是时候分享了~下面是使用说明。

    脚本概要

    Demo下载
    程序总共由两个脚本完成,最后将 ICS 导入日历即可。步骤概要:
     1. 使用 excelReader.py 将保存的 classInfo Excel 表格导出容易解析的 conf_classInfo.json

     2. 使用 main.py 将配置好的 conf_classTime.json 和生成的 conf_classInfo.json 生成一个 class.ics

     3. 将 class.ics 导入手机或者电脑

     4. 搞定!

    环境要求

    Python 2.7+

    执行详解

    1、配置 classInfo Excel 表格

    在工作目录下创建一个 classInfo Excel 表格,表格表头有如下参数:

    className:课程名称
    startWeek:起始周
    endWeek:结束周
    weekday:星期
    classTime:第几节。这个参数要配合 conf_classTime.json 文件,下文会讲。
    classroom:教室

    2、配置 conf_classTime.json

    来吧,照猫画虎:

    {
      "classTime": [
        {
            "name":"第 1、2 节",
            "startTime":"0830",
            "endTime":"1005"
        },
        {
            "name":"第 3、4 节",
            "startTime":"1025",
            "endTime":"1200"
        },
        {
            "name":"第 5、6、7 节",
            "startTime":"1350",
            "endTime":"1615"
        },
        {
            "name":"第 8、9 节",
            "startTime":"1630",
            "endTime":"1800"
        },
        {
            "name":"第 10、11、12 节",
            "startTime":"1830",
            "endTime":"2100"
        }
      ]
    }

    3、运行 excelReader.py 脚本

    终端运行:
    python excelReader.py

    excelReader.png

     如果 classInfo 表格是按照 Demo 的样式保存的,输入 0 继续即可。如果不是……你改回来就可以。(一个小脚本而已,懒得做那么多容错啦~)
      完成后生成一个conf_classInfo.json 配置文件

    4、运行 main.py 脚本

    终端运行:
    python main.py
    main.png
      回车后,需要输入两个参数:第一周的星期一日期、提醒时间。

      提醒时间就是在 iOS、Mac 上创建日历时所使用的设置,不知道这样的设置在 Android 和 Windows 是否生效。待测。

      完成后在工作目录下会生成一个 class.ics 文件

    5、导入手机或者电脑

      如果你是 Mac + iOS, 恭喜你,直接点开 class.ics 就可以导入 Mac, 然后等待 iCloud 同步就可以。

      如果想单独导入 iOS,可以用邮件将 ics 发送到你的 iOS 可以收到的邮箱里,在邮箱内打开就可以。

      Android 和 Windows 的导入方法我没试过,不过我觉得应该和 iOS、Mac 差不多的。

    日历.png

    以上为转载内容

    遇到的一些问题

      在macOS High Sierra下执行excelReader.py脚本的时候遇到找不到头文件的情况,在Ubuntu虚拟机里试了也出现同样的情况,说明应该不是特例。

    error.png

      对Python一窍不通的我谷歌了一下xlrd这个库,查询了一下安装方法。

      因为不想在Mac里装一些其它奇怪的东西,所有下面的操作均在Ubuntu下进行,Mac是一样的。

    先安装pip,看一下本地环境的Python版本是多少,Python 3的话就装pip3Python 2的话就直接装pip。执行python查看Python版本,可以看到我的版本是2.7.12,装pip
    version.png

    安装pip:sudo apt install python-pip
    installpip.png

    安装xlrd库:pip install xlrd
    installxlrd.png

    写在最后

      至此就完成了所有的操作,然后再回到教程里执行常规操作就好啦,附上几张我自己的成果图:D

    Apple Watch上的效果:

    watch.png

    watch2.png

    电脑上看的效果:

    Mac日历

    手机上的效果:

    phone)

    稍作修改

      这篇博客里的课程显示方式对于Apple Watch来说不是很友好(太长了显示不下),又因为Apple Watch自带显示时间,所以我把对于第几节课的显示给去掉了。

      原来是:离散数学|第1、2节|南堂317,被我修改为:离散数学@南堂317

    附上链接:https://file.lucien.ink/ClassDemo.zip

    展开全文
  • ios平台下强大的表格控件 gridview表格,支持手势滑动
  • 一个仿课程表的应用,在学校做的,未完成 demo. 偶然找出来了.给新手们学习一下吧.勿喷 课程表 新闻 定时任务 推送 下载地址:https://github.com/xiongcaichang/hedaAssistantGit 下面的文件不存在,请在...
  • iOS 简单日历制作

    2017-05-16 18:08:38
    #import "ViewController.h" #import "CollectionViewCell.h" #define screenSize [UIScreen mainScreen].bounds.size @interface ViewController ()UICollectionViewDataSource,UICollectionViewDelegate,UIColl

    #import "ViewController.h"

    #import "CollectionViewCell.h"

    #define screenSize [UIScreen mainScreen].bounds.size

    @interface ViewController ()<</span>UICollectionViewDataSource,UICollectionViewDelegate,UICollectionViewDelegateFlowLayout>

    @property (nonatomic, strong) UICollectionView *collectionView;

    @property (nonatomic, strong) NSArray *weekdayArray;

    @property (nonatomic, strong) NSDate *date;

    @property (nonatomic, strong) NSDate *todayDate;

    @property (nonatomic, assign) NSInteger monthDay;

    @property (nonatomic, assign) NSInteger month;

    @property (nonatomic, assign) NSInteger year;

    @property (nonatomic, assign) NSInteger firstWeekdayInThisMonth;

    @property (nonatomic, assign) NSInteger totaldaysInMonth;

    @end


    @implementation ViewController


    - (void)viewDidLoad {

        [super viewDidLoad];

        UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc]init];

        flowLayout.itemSize = CGSizeMake(screenSize.width/7,screenSize.height/7);

        flowLayout.minimumInteritemSpacing = 0;

        flowLayout.minimumLineSpacing = 0;

        flowLayout.sectionInset = UIEdgeInsetsMake(0, 0, 0, 0);

        self.collectionView = [[UICollectionView alloc]initWithFrame:CGRectMake(0,50, screenSize.width, screenSize.height-50) collectionViewLayout:flowLayout];

        [self.collectionView registerNib:[UINib nibWithNibName:@"CollectionViewCell" bundle:nil] forCellWithReuseIdentifier:@"cell"];

        self.collectionView.delegate = self;

        self.collectionView.dataSource = self;

        self.collectionView.backgroundColor = [UIColor whiteColor];

        

        [self.view addSubview:self.collectionView];

        

        self.weekdayArray = @[@"",@"",@"",@"",@"",@"",@""];

        

        self.date = [NSDate date];

        

    }

    #pragma 日历的方法

    - (void)setDate:(NSDate *)date {

        

        self.todayDate = date;

        

        NSDateComponents *dateComp = [[NSCalendar currentCalendar] components:(NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay) fromDate:date];

        

        NSCalendar *calendar = [NSCalendar currentCalendar];

        calendar.firstWeekday = 1 ;//1.Sun. 2.Mon. 3.Thes. 4.Wed. 5.Thur. 6.Fri. 7.Sat.

        dateComp.day = 1;

        NSDate *firstDayOfMonthDate = [calendar dateFromComponents:dateComp];

        NSUInteger firstWeekday = [calendar ordinalityOfUnit:NSCalendarUnitWeekday inUnit:NSCalendarUnitWeekOfMonth forDate:firstDayOfMonthDate];

        

        self.firstWeekdayInThisMonth = firstWeekday -1;

        NSRange daysInMonth = [calendar rangeOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitMonth forDate:date];

        self.totaldaysInMonth = daysInMonth.length;

        [self.collectionView reloadData];

    }

    #pragma collectionView的方法

    - (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {

        return 2;

    }

    - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {

        if (section == 0) {

            return self.weekdayArray.count;

        } else {

            return 42;

        }

    }

    - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {

        CollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cell" forIndexPath:indexPath];

        if (indexPath.section == 0) {

            cell.textLabel.text = self.weekdayArray[indexPath.row];

        } else {

            if (indexPath.row < self.firstWeekdayInThisMonth) {

                cell.textLabel.text = @"";

                [cell setUserInteractionEnabled:NO];

            } else if (indexPath.row > self.totaldaysInMonth + self.firstWeekdayInThisMonth - 1) {

                cell.textLabel.text = @"";

                [cell setUserInteractionEnabled:NO];

            } else {

                [cell.textLabel setText:[NSString stringWithFormat:@"%ld",(long)indexPath.row - self.firstWeekdayInThisMonth + 1]];

            }

        }

        

        return cell;

    }

    - (IBAction)priviousBtn:(id)sender {

        NSDateComponents *dateComp = [NSDateComponents new];

        dateComp.month = -1;

        NSDate *newDate = [[NSCalendar currentCalendar] dateByAddingComponents:dateComp toDate:self.todayDate options:0];

        NSLog(@"%@",newDate);

        [UIView transitionWithView:self.view duration:0.5 options:UIViewAnimationOptionTransitionCurlUp animations:^{

            self.date = newDate;

            

        } completion:nil];

        

    }

    - (IBAction)nextBtn:(id)sender {

        NSDateComponents *dateComp = [NSDateComponents new];

        dateComp.month = 1;

        

        NSDate *newDate = [[NSCalendar currentCalendar] dateByAddingComponents:dateComp toDate:self.todayDate options:0];

        NSLog(@"%@",newDate);

        [UIView transitionWithView:self.view duration:0.5 options:UIViewAnimationOptionTransitionCurlDown animations:^{

            self.date = newDate;

        } completion:nil];

        

        

    }


    - (void)didReceiveMemoryWarning {

        [super didReceiveMemoryWarning];

        // Dispose of any resources that can be recreated.

    }


    @end

    Demo下载:https://pan.baidu.com/s/1jHXVe9C

    展开全文
  • iOS采用UITableView和UIScrollView来实现Excel、课程表的上下左右联动效果 在项目中遇到了许多报表,虽然目前只是一个简单的展示,可以用tableView单元格显示,满足目前的需求,但是我仔细考虑了,能不能实现类似...
  • 这一节主要介绍UITableView以及iPad,Demo为从Flicker下载图片并显示,但是实际过程中发现需要FQ并使用HTTPS连接,所以这次用了两个Demo,一个是课程中的Demo,另一个是简化的。 最后调试过程中还找到Xcode中观察...
  • 寸光阴课程表 功能齐全的计算器 每日金句 扫雷游戏 数字输入 天气预报 之DDClock 之滚动视图旋转菜单 状态栏-StatusBar Notifier View 状态栏之MPNotificationView Ad Controller AdMob demo Animation之Gmail ...
  • 一个精简的日历demo,方便学习,同时方便你自己扩展,加功能 代码片段: myCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; //设置每周的第一天从星期几开始(1是周日,2...
  • 虽然6月13日W  WDC2016的发布会结束了,但是本届大会的开发者session环节还在持续进行着。...根据黑马程序员惯例,在文章的最后,有相关相关教学视频及Demo会有分享链接,供各位下载!      1.G
  • iOS开发人员,和其它传统开发者相比有哪些不同之处? 需要具备怎样的硬件和软件条件?今天我们就来说说这一部分的内容。
  • UITableView(表格视图)是iOS应用程序开发中应用最广泛的一个控件,几乎十有八九的应用程序中都会用到它,它是基于滚动视图的列表互动类。使用UITableView可以在屏幕上显示单元格的列表,每个单元格中还可以包含多...
  • ios开发中MVC详解

    2015-09-12 17:09:01
    我们今天谈谈cocoa程序设计中的 模型-视图-控制器(MVC)范型。我们将从两大方面来讨论MVC:   什么是MVC?M、V、C之间的交流方式是什么样子的?...MVC是Model-VIew-Controller,就是模型-视图-控制器,...
  • iOS精选源码 JPLiquidLayout 简单易用的流式布局...iOS采用UITableView和UIScrollView来实现Excel、课程表的上下左右… 3D Touch打开控制器 Navigation Toolbar iOS简易记事本 iOS高仿美团外...
  • 本文作者,是一名正在努力学习的iOS开发工程师,目前致力于全栈方向的学习,在此记录下自己的学习历程. 个人学习方法分享浅谈iOS进阶路线 如何优雅的使用Mac进行远程控制 本文阅读建议 1.一定要辩证的看待本文. 2...
1 2 3 4 5 ... 20
收藏数 1,173
精华内容 469
关键字:

ios课程表demo下载