「OC」暑假第二周——3Gshared的仿写与学生管理系统

「OC」暑假第二周——3Gshared的仿写与学生管理系统

文章目录

  • 「OC」暑假第二周——3Gshared的仿写与学生管理系统
    • 3Gshared
      • 登陆注册页面
      • 首页
      • 搜索
      • 推荐和活动
      • 我的
        • 我的推荐和我推荐的
        • 我的信息
      • 设置
    • 学生管理系统
      • 登陆注册界面
      • 主页面
      • 增删改查以及排序
    • 总结

3Gshared

登陆注册页面

Jul-26-2024 10-21-56

这个页面主要使用了协议传值将注册之后的账号密码打包之后回传至登陆页面的可变数组之中,注册实现的逻辑是当输入的两次密码不同时,就显示无法进行登陆,如果对一个账号进行重复的注册,就会显示已经重复注册。

Jul-26-2024 10-33-17

在登录页面就是当用户点击登录按钮时,遍历可变的数组,如果账号与密码都对得上的话就通过验证。

另外这两个的文本框的输入是有长度显示而且限制其他字符的输入

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {if ([string isEqualToString:@""]) {return YES;}NSString *newText = [textField.text stringByReplacingCharactersInRange:range withString:string];if (newText.length > 15) {return NO;}NSCharacterSet *allowedCharacters = [[NSCharacterSet alphanumericCharacterSet] invertedSet];return [string rangeOfCharacterFromSet:allowedCharacters].location == NSNotFound;
}

这个文本框限制长度超过15的输入,而且将输入的字符范围限定在了数字和字母这两类字符之中

首页

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

首页的功能为展示,分为滚动视图的cell和展示滑动的cell,屏幕上的三个按钮都可以进行互动,而且展示cell之中的第一个可以打开,上面headerview的三个按钮的状态与外面三个按钮的状态同步,点赞按钮是点击一次变亮,再点一次就取消,浏览量则是需要点击进行进入按钮颜色就会变亮且浏览量加一,分享则是可以连续多次点击增加次数。

对于三个按钮状态的传值,我使用了一个协议进行操作,先将当前的按钮状态通过属性传入弹出的视图控制器之中,再通过下一个控制器属性传输到该视图控制器的headerVIew之中,为了实现这个view能够跟着屏幕的滚动而滑动,我使用了tabieView之中的headerView。而当返回键被点击的时候,会将这headerView之中的按钮状态通过协议进行一个回传

-(void)backToSecond {[self.delegate updateMutableArray:self.headerView.counting andBool:self.headerView.isBool];[self.navigationController popViewControllerAnimated:YES];
}//假日页面的返回按钮事件——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
- (void)updateMutableArray:(NSMutableArray *)updatedArray andBool:(NSMutableArray *)updatedArray1 {self.count[0] = updatedArray;self.isBool[0] = updatedArray1;NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:1];FirstTableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];[cell removeFromSuperview];FirstTableViewCell *newCell = [[FirstTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"FirstCell"];[newCell setUpCellWithTextDic:self.items[0] countArray:updatedArray andisBool:updatedArray1 forCell:newCell];[self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
}//协议之中的方法

搜索

搜索的主页面如下

Jul-26-2024 16-09-15

当我们在搜索框之中打出大白进行搜素,就会弹出一个新的界面,我们需要对之中这些按钮的状态进行选中判定

- (void)buttonTapped:(UIButton *)sender {sender.selected = !sender.selected;sender.backgroundColor = sender.selected ? [UIColor colorWithRed:69 / 255.0f green:148 / 255.0f blue:213 /255.0f alpha:1.0] : [UIColor whiteColor];
}

右上角的按钮是弹出的发布界面,点击选择图片,会弹出图片墙,然后当选择完成的时候,会将最先点击的一个图片进行回传,并且在右上角显示回传图片的个数,若没有选择图片按下发布键就会显示先上传图片,还有一个折叠cell可以选择发的内容的标签

Jul-26-2024 16-09-19

对于要回传第一张点击的图片,有可能存在第一次图片点击之后,又将这个内容再次点击取消了,所有我们要使用一个数组去进行存储,当我们再次点击的时候就将相关的按钮从数组之中移除,到时候通过协议回传的时候就回传照片数组之中的第一个元素,具体代码如下

-(void)buttonTapped: (UIButton*) sender {sender.selected = !sender.selected;if (sender.selected) {sender.layer.borderWidth = 6;[self.selectImagearray addObject:self.images[sender.tag]];self.count++;} else {sender.layer.borderWidth = 0;[self.selectImagearray removeObject:self.images[sender.tag]];self.count--;}
}
-(void)selectmyImage {//点击返回上一界面的按钮实现的事件[self.delegate photoWallViewController:self didSelectImage:[self.selectImagearray firstObject] andCount:self.count];[self.navigationController popViewControllerAnimated:YES];
}

推荐和活动

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

推荐和活动这两个界面比较简单,推荐就是先前学过的分栏控件和滚动视图的结合,按钮的规则与shared首页基本相同,活动界面就只是简单的cell实现即可

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我的

我的页面相对来说还是比较繁琐的

我的推荐和我推荐的

Aug-08-2024 22-26-50

这个内容还是比较简单,就是前面的推荐页面和活动页面

我的信息

Aug-08-2024 23-18-54

我的消息页面主要就是实现私信内容以及如何保存关注按钮的点击状态,我们其实可以在消息页面之中将关注页面的控制器作为一个strong类型的属性,实现懒加载,就是当这个属性为空的时候才会创建,如果已经创建就直接进行返回,就避免了创建新的控制器导致先前的操作消失。

if (self.messageSettingvc == nil){self.messageSettingvc = [[MessageSettingViewController alloc] init];}

对于私信页面的编写是使用了自定义cell,先前已经写出博客总结,如有需要可供参考:

「OC」实现简单的聊天室界面

设置

Aug-10-2024 00-46-54

基本资料之中需要的其实就是简单的布局,互动的两个按钮需要实现只有一个能亮,当点击一个按钮时另一个就要熄灭

-(void)press1 : (UIButton*)sender {if(!sender.selected) {sender.selected = YES;self.femaleButton.selected = NO;}
}-(void)press2 : (UIButton*)sender {if(!sender.selected) {sender.selected = YES;self.maleButton.selected = NO;}
}

修改密码一项就是使用正则表达式对相关的输入长度和内容进行限制,以及验证两项的密码是否相同,若是相同则弹出修改成功的选项,清理缓存则是直接跳出一个弹窗两秒之后消除

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(90, 400, 200, 50)];label.backgroundColor = [UIColor colorWithRed:64 / 255.0f green:64 / 255.0f blue:64 /255.0f alpha:1.0];label.textAlignment = NSTextAlignmentCenter;label.textColor = [UIColor whiteColor];label.text = @"缓存已被清除";[self.view addSubview:label];// 使用动画延迟两秒后让 UILabel 消失[UIView animateWithDuration:0.5 delay:2.0 options:UIViewAnimationOptionCurveEaseOut animations:^{label.alpha = 0.0;} completion:^(BOOL finished) {[label removeFromSuperview];}];

学生管理系统

登陆注册界面

image-20240810123425531

登陆与注册界面就是与3Gshared的代码逻辑基本相同,就是学习了如何将图片设置为背景,并且添加了自定义字体,并没有进行其它改动

主页面

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我的增删改查以及排序等内容都是在一个页面之中进行操作做的,当点击哪一个按钮,就会跳出相应的两个按钮和三个文本框,其中文本框的输入限制,我使用了正则表达式进行修改,代码内容如下

- (BOOL)validateName:(NSString *)name {NSString *pattern = @"^[\\p{Han}]{1,5}$";NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", pattern];return [predicate evaluateWithObject:name];
}- (BOOL)validateClass:(NSString *)className {NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", @"^[\u4e00-\u9fa5]{2,3}[0-9]{4}$"];return [predicate evaluateWithObject:className];
}
- (BOOL)validateGrade:(NSString *)grade {NSCharacterSet *gradeCharacterSet = [NSCharacterSet decimalDigitCharacterSet];if ([grade rangeOfCharacterFromSet:gradeCharacterSet.invertedSet].location == NSNotFound) {NSInteger value = [grade intValue];if (value < 200) {return YES;}}return NO;
}

要是有读者需要了解正则表达式的内容我推荐一下博客

一看就懂:正则表达式

关于其中的谓词过滤我会重新整理进行博客发布。

增删改查以及排序

关于增删改查我觉得没有特别大的难度,是因为OC之中的可变数组插入,删除,增添等操作都有对应的函数,因为我的查找和排序都是在一个控制器之中完成,我还是费了一番功夫 。对于查找和排序,在进行相关操作之前我都会使用一个数组把原来的数组给进行保存,然后在返回的时候再将保存的数组赋值给展示的数组,这样就成功的实现了查找以及排序,代码如下

else if ([action isEqualToString:@"搜索"]) {self.results = [NSMutableArray array];for (student *stu in self.student) {if (([stu.name isEqualToString:name] && [classes isEqualToString:@""]) ||([stu.classes containsString:classes] && [name isEqualToString:@""]) ||([stu.name isEqualToString:name] && [stu.classes containsString:classes])) {[self.results addObject:stu];}}if (self.results.count == 0) {UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"提示" message:@"未找到符合条件的学生" preferredStyle:UIAlertControllerStyleAlert];UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:nil];[alert addAction:okAction];[self presentViewController:alert animated:YES completion:nil];} else {self.student = [self.results mutableCopy];self.text1.hidden = YES;self.text2.hidden = YES;self.confirmbtn.hidden = YES;self.backbtn.hidden = YES;[self.changebtn setTitle:@"返回" forState:UIControlStateNormal];self.changebtn.hidden = NO;}}- (void)changeTapped {self.student = [self.originalStudents mutableCopy];[self backTapped];[self.tableView reloadData];
}

总结

3Gshare是一个比较繁琐的任务,通过此次的任务,锻炼了自己的能力,特此进行记录。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/398086.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【NetTopologySuite类库】创建可变距离的缓冲区

介绍 API地址 沿直线在每个顶点处创建具有不同缓冲区距离的缓冲区多边形。 只支持线作为输入&#xff0c;因为缓冲区宽度通常需要为每条线单独指定。 示例 var wkt "linestring(0 0,1 0, 2 0,3 1,4 1,5 1,6 -1,7 -1,8 -1)"; var r new WKTReader(); var g r.…

物资管理系统

可用于期末作业或Java课设 系统功能主要包括&#xff1a; 管理员管理&#xff0c;可以进行管理员信息的添加修改和删除以及修改密码。 客户管理&#xff1a;可以进行客户信息的增删查改&#xff0c;也可以进行物资的租赁。 建材管理&#xff1a;可以查看建材的库存数量…

Spring MVC框架学习笔记

学习视频:10001 Spring MVC概述_哔哩哔哩_bilibili~11005 请求映射方式_哔哩哔哩_bilibili 目录 1.概述 Java EE三层架构 Spring MVC在三层架构中的位置 ​编辑 Spring MVC在表现层的作用 Spring MVC的特点 2.Spring MVC入门程序 代码实现 Spring MVC工作原理 Spring …

《Java编程自学:核心概念与技巧》 第1章: 对象的本质

《Java编程自学&#xff1a;核心概念与技巧》 第1章&#xff1a; 对象的本质 《Java编程自学&#xff1a;核心概念与技巧》第2章 启程&#xff1a;Hello, World&#xff01;的探索之旅 1.1 从机器视角到问题视角的演变 在计算机科学的发展历程中&#xff0c;我们见证了从机器…

基于STM32的智能宠物喂食器

目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 初始化代码控制代码应用场景 宠物定时喂食远程控制喂食常见问题及解决方案 常见问题解决方案结论 1. 引言 智能宠物喂食器可以通过定时和远程控制&#xff0c;实现对宠物的科学喂养。本文将…

「11月·香港」第三届人工智能、人机交互和机器人国际学术会议(AIHCIR 2024)

第三届人工智能、人机交互和机器人国际学术会议&#xff08;AIHCIR 2024&#xff09;组委会热忱地邀请您参与本届大会。本届大会旨在聚集领先的科学家、研究人员和学者&#xff0c;共同交流和分享在人工智能、人机交互和机器人各个方面的经验和研究成果&#xff0c;为研究人员、…

docker容器常用指令,dockerfile

docker&#xff1a;容器&#xff0c;主要是解决环境迁移的问题&#xff0c;将环境放入docker中&#xff0c;打包成镜像。 docker的基本组成&#xff1a;镜像(image)&#xff0c;容器(container)&#xff0c;仓库(repository)。镜像相当于类&#xff0c;容器相当于类的实例对象…

数学建模~~追逐仿真问题

目录 1.前景介绍 2.题目描述 3.核心思路 4.思路分析 5.代码分析 5.1准备工作 5.2设置循环 5.3终止循环 5.4绘制图形 5.5完整代码 1.前景介绍 今天上午的数学建模培训王老师介绍的这个数学建模相关的经验真的是让我受益匪浅&#xff0c;让我对于数学建模有了更加清晰的…

简单的docker学习 第13章 CI/CD与Jenkins(下)

第13章 CI/CD 与 Jenkins 13.13 自由风格的 CI 操作(最终架构) 前面的架构存在的问题是&#xff0c;若有多个目标服务器都需要使用该镜像&#xff0c;那么每个目标服务器都需要在本地构建镜像&#xff0c;形成系统资源浪费。若能够在 Jenkins 中将镜像相撞构建好并推送到 Har…

【区块链+乡村振兴】福建三明某县农业农村局:茶叶认标购茶区块链溯源平台 | FISCO BCOS应用案例

为了有效打击市场上茶叶假冒伪劣、以次充好的违法行为&#xff0c;从而激励企业参与维护的积极性&#xff0c;促进茶叶产业的良 性循环&#xff0c;进而塑造高品质品牌价值&#xff0c;福建省三明市某县农业农村局基于 FISCO BCOS 建设了茶叶认标购茶区块链溯源平台&#xff0c…

linux内核驱动:GIC中断总结

目录 前言一、整体介绍二、GIC的模块功能说明三、函数接口、数据结构和驱动文件驱动文件数据结构 四、中断使用流程五、中断的扩展 前言 本文基于linux5.10.xxx总结gic使用&#xff0c;gic版本为gicv3&#xff0c;包括gic结构、驱动代码、使用等&#xff0c;等&#xff0c;处理…

入门学习使用overleaf和latex

文章目录 1.下载对应的latex论文模板2.overleaf平台的使用2.1overleaf平台的介绍2.2overleaf平台模板文件的上传2.3latex语法的学习2.3.2 分段(如下图显示)2.3.3 其他2.3.4简单latex实操2.3.5 换行符和换页符2.3.6左右居中对齐2.3.7 字体设置2.3.8插入固定位置图片2.3.9文字包围…

基于区块链的数字身份应用开发(上)

基于区块链的数字身份应用开发(上&#xff09; 任务一&#xff1a;环境准备 &#xff08;1&#xff09;更新镜像源 apt update&#xff08;2&#xff09;安装openssl、jdk、git &#xff08;3&#xff09;配置JAVA_HOME环境变量 echo "export JAVA_HOME/usr/lib/jvm/j…

HarmonyOS.FA开发流程

开发环境配置 1、DevEco Studio的安装 2、DevEcoStudio模拟运行工程&#xff1a;运行Tools->Device Manager&#xff0c;使用已认证的HW开发者联盟帐号Login&#xff08;在DP平台申请测试者权限&#xff09;&#xff0c;点击"允许"授权&#xff0c;选择一个设备运…

Windows10、ARM开发板、虚拟机Ubuntu可同时上网

一、Windows10端设置 1、打开网络配置 2、打开适配器 3、将window连接的wifi网卡设置为共享模式 4、查看本地连接的ip 到此&#xff0c;window10端设置完毕 二、设置虚拟机端&#xff08;Ubuntu&#xff09; 1、打开网络配置 2、打开适配器 3、查看本地连接的网卡名称 4、配置…

docker RUN覆盖容器主进程命令

docker容器启动失败正常都是由于启动主进程退出导致的&#xff0c;主进程启动命令往往都是由镜像Dockerfile文件最后的ENTRYPOINT或CMD定义的&#xff0c;此时可覆盖主进程启动命令&#xff0c;更换一个挂起的命令即可。我常用挂起命令&#xff1a;/bin/bash 1、检查容器启动主…

Maven的理解与应用

Maven使用 一、Maven的含义 Maven是一个构建项目的工具&#xff0c;也是一个管理项目的工具 二、Maven的应用 构建项目 管理依赖 做项目的热部署 基于项目做多模块&#xff08;modle&#xff09;的构建 三、Maven的安装 注意&#xff1a;maven本身不需要安装&#xff0c;下…

机器学习笔记:门控循环单元的建立

目录 介绍 结构 模型原理 重置门与更新门 候选隐状态 输出隐状态 模型实现 引入数据 初始化参数 定义模型 训练与预测 简洁实现GRU 思考 介绍 门控循环单元&#xff08;Gated Recurrent Unit&#xff0c;简称GRU&#xff09;是循环神经网络一种较为复杂的构成形式…

【网络编程】UDP通信基础模型实现

udpSer.c #include<myhead.h> #define SER_IP "192.168.119.143" #define SER_PORT 7777 int main(int argc, const char *argv[]) {//1.创建int sfd socket(AF_INET,SOCK_DGRAM,0);if(sfd -1){perror("socket error");return -1;}//2.连接struct…

element-ui周选择器,如何获取年、周、起止日期?

说明 版本&#xff1a;vue2、element-ui2.15.14 element-ui的日期选择器可以设为周&#xff0c;即typeweek&#xff0c;官方示例如下&#xff1a; 如果你什么都不操作&#xff0c;那么获取的周的值为&#xff1a; value1: Tue Aug 06 2024 00:00:00 GMT0800 (中国标准时间)如…