You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

425 lines
15 KiB

//
// StudentInfoViewController.m
// tongxin
//
// Created by ecell on 2021/11/17.
// Copyright © 2021 xTT. All rights reserved.
//
#import "StudentInfoViewController.h"
#import "SelectContactVC.h"
#import "EditDeviceHeadTableViewCell.h"
#import "EidtDeviceContactWithDeviceTableViewCell.h"
#import "NewTableViewCell.h"
#import "NewOrdinaryTableViewCell.h"
#import "LoginViewController.h"
#import "QRcodeViewController.h"
#import "MyUILabel.h"
#import "StudentInfoModel.h"
@interface StudentInfoViewController () <UINavigationControllerDelegate,UITextFieldDelegate>
{
NSInteger _loginType;// 登录的类型
}
@property (strong, nonatomic) UITextField *nameTextField;
@property (strong, nonatomic) StudentInfoModel *model;
@end
@implementation StudentInfoViewController
@synthesize myDataSource = _myDataSource;
- (NSMutableArray *)myDataSource{
if (!_myDataSource) {
_myDataSource = [[NSMutableArray alloc] initWithArray:@[@[@"学校",@"班级",@"学号",@"紧急联系人电话"]]];
}
return _myDataSource;
}
-(void)setIsAdd:(BOOL)isAdd{
_isAdd = isAdd;
if(isAdd){
_isEdit = YES;
}
}
-(void)setIsShowAllInfo:(BOOL)isShowAllInfo{
_isShowAllInfo = isShowAllInfo;
if(isShowAllInfo){
self.myDataSource = [[NSMutableArray alloc] initWithArray:@[@[@"学校",@"班级",@"学号",@"紧急联系人电话"]]];
}else{
self.myDataSource = [[NSMutableArray alloc] initWithArray:@[@[@"学校",@"班级",@"学号",@"紧急联系人电话"]]];
}
}
-(void)setIsEdit:(BOOL)isEdit{
_isEdit = isEdit;
[self.view endEditing:YES]; // 取消所有 文本框焦点
[self.myTableView reloadData];
}
- (Device *)editDevice{
_editDevice = cUser.cDevice;
return _editDevice;
}
-(UIBarButtonItem *)addBarButton{
if(!_addBarButton){
_addBarButton = [[UIBarButtonItem alloc] initWithTitle:@"添加" style:UIBarButtonItemStylePlain target:self action:@selector(rightBarItemClick:)];
}
return _addBarButton;
}
- (UIBarButtonItem *)editAndSaveBarButton{
if(!_editAndSaveBarButton){
_editAndSaveBarButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"icon_data_editor_orange"] style:UIBarButtonItemStylePlain target:self action:@selector(rightBarItemClick:)];
}
return _editAndSaveBarButton;
}
-(UIBarButtonItem *)codeBarButton{
if(!_codeBarButton){
_codeBarButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"icon_or_code"] style:UIBarButtonItemStylePlain target:self action:@selector(codeShowAction:)];
}
return _codeBarButton;
}
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
_loginType = [myHelper getNowAccoutType:cUser];
WEAKSELF
[_model query:^(StudentInfoModel *model) {
weakSelf.model = model;
[weakSelf.myTableView reloadData];
} failure:^(NSError *error) {
}];
}
- (void)viewDidLoad {
[super viewDidLoad];
_model = [[StudentInfoModel alloc] init];
self.title = @"学生资料";
UIBarButtonItem *negativeSpacer = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
negativeSpacer.width = -15;
self.navigationItem.rightBarButtonItems = @[self.codeBarButton,negativeSpacer,self.editAndSaveBarButton];
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[myHelper getImageWithName:@"返回"] style:UIBarButtonItemStylePlain target:self action:@selector(goBack:)];
[self initTableCellView];
[self.view addSubview:self.myTableView];
}
/**
初始化tableViewCell
*/
-(void)initTableCellView{
//设备头像头部
[self.myTableView registerNib:[UINib nibWithNibName:@"EditDeviceHeadTableViewCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:@"EditDeviceHeadTableViewCellID"];
//关系尾部
[self.myTableView registerNib:[UINib nibWithNibName:@"EidtDeviceContactWithDeviceTableViewCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:@"EidtDeviceContactWithDeviceTableViewCellID"];
//中间的 cell
[self.myTableView registerNib:[UINib nibWithNibName:@"NewOrdinaryTableViewCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:@"NewOrdinaryTableViewCellID"];
//去线
self.myTableView.separatorStyle = UITableViewCellSelectionStyleNone;
self.myTableView.backgroundColor = RGB(248 , 248, 248);
MyUILabel *footer = [[MyUILabel alloc] initWithFrame:CGRectMake(0, 0, ScreenWidth, 60)];
footer.font =[UIFont systemFontOfSize:14];
footer.adjustsFontSizeToFitWidth = YES;
footer.numberOfLines = 0;
footer.baselineAdjustment = UIBaselineAdjustmentAlignCenters;
[footer setTextColor:[UIColor systemGrayColor]];
[footer setText:@"温馨提示:学生资料可以更改学校、班级、学号和紧急联系人信息"];
self.myTableView.tableFooterView = footer;
}
-(void)codeShowAction:(UIBarButtonItem *)sender{
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
QRcodeViewController *vc = [sb instantiateViewControllerWithIdentifier:@"QRcodeViewController"];
[self.navigationController pushViewController:vc animated:YES];
}
/**
修改,保存 和 添加的方法
*/
- (void)rightBarItemClick:(UIBarButtonItem *)sender{
self.editDevice.name = self.nameTextField.text;
if(self.isEdit == YES ||([sender.title isEqualToString:@"添加"])){
[self saveAction];
} else if (self.isEdit == NO){
sender.image = [UIImage imageNamed:@"icon_equipment_information_save"];
self.isEdit = YES;
}
}
-(void)saveAction {
self.editDevice.my_phone = cUser.phone;
WEAKSELF
[_model save:_model success:^{
[weakSelf quitThisVC];
} failure:^(NSError *error) {
}];
}
-(void)goBack:(id)sender{
[self.view endEditing:YES];
if(!self.isAdd && self.isEdit){
WEAKSELF
LGAlertView *alertView = [[LGAlertView alloc] initWithTitle:nil message:@"是否保存修改" style:LGAlertViewStyleAlert buttonTitles:@[@"确定"] cancelButtonTitle:@"取消" destructiveButtonTitle:nil actionHandler:^(LGAlertView *alertView, NSString *title, NSUInteger index) {
[weakSelf rightBarItemClick:self.editAndSaveBarButton];
} cancelHandler:^(LGAlertView *alertView) {
[weakSelf quitThisVC];
} destructiveHandler:^(LGAlertView *alertView) {
}];
[alertView showAnimated:YES completionHandler:nil];
}else{
[self quitThisVC];
}
}
-(void)quitThisVC{
[self.navigationController popViewControllerAnimated:YES];
}
/**
显示完善资料的切换
*/
-(void)perfectInformationAction{
self.isShowAllInfo = YES;
[self.myTableView reloadData];
}
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
NSString *title = self.myDataSource[indexPath.section][indexPath.row];
if (!self.isShowAllInfo && [title isEqualToString:@"完善设备资料"]){
return 0;
}
return 60; // 50--》60
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
NSString *title = self.myDataSource[indexPath.section][indexPath.row];
// if(indexPath.section == 0 && indexPath.row == 0){ //头部信息
// EditDeviceHeadTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"EditDeviceHeadTableViewCellID" forIndexPath:indexPath];
// [cell setDevice:self.editDevice WithStatus:self.isAdd isEdting:self.isEdit];
// return cell;
// } else {
NewOrdinaryTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"NewOrdinaryTableViewCellID" forIndexPath:indexPath];
cell.accessoryType = UITableViewCellAccessoryNone;
cell.aTextField.textAlignment = NSTextAlignmentRight;
cell.aTitleLabel.text = title;
cell.aTextField.textColor = [UIColor blackColor];
//在区域的尾部 隐藏线
NSInteger lastIndex = [self.myDataSource[indexPath.section] count] -1;
if(lastIndex < 0){
lastIndex = 0;
}
if(indexPath.section == 0 && indexPath.row == lastIndex){
cell.lineView.hidden = YES;
}else if (indexPath.section == 1 && indexPath.row == lastIndex){
cell.lineView.hidden = YES;
}else{
cell.lineView.hidden = NO;
}
// 需要设置一下默认 设置 ,防止 重用 cell input 错乱
[cell defaultInputView];
if(self.isEdit && ([self.editDevice.identity isEqualToString:@"admin"] || _loginType == 3)){
//需 管理员关系 或者是imei游客登录 且 在编辑状态下 才能修改
cell.userInteractionEnabled = YES;
} else {
if(self.isEdit){
//成员编辑状态下
/* 成员可编辑的状态
@"学校",
@"班级",
@"学号",
@"紧急联系人电话"
*/
if([title isEqualToString:@"学校"]
|| [title isEqualToString:@"班级"]
|| [title isEqualToString:@"学号"]
|| [title isEqualToString:@"紧急联系人电话"]){
cell.userInteractionEnabled = YES;
}else {
cell.aTextField.textColor = [UIColor lightGrayColor];
cell.userInteractionEnabled = NO;
}
}else{
cell.aTextField.textColor = [UIColor lightGrayColor];
cell.userInteractionEnabled = NO;
}
}
if ([title isEqualToString:@"名称"]) {
cell.aTextField.placeholder = @"请输入名称";
cell.aTextField.text = self.editDevice.name;
self.nameTextField = cell.aTextField;
cell.aTextField.delegate = self;
//不实现回调
cell.block = nil;
return cell;
}
if ([title isEqualToString:@"性别"]) {
cell.aTextField.placeholder = @"选择性别";
NSInteger index = ([self.editDevice.sex isEqualToString: @"girl"]) ? -1 : 0;
[cell numberInputViewWithStartNum:-1 EndNum:1 WithIndex:index];
cell.aTextField.text = ([self.editDevice.sex isEqualToString: @"girl"]) ? @"女孩" : @"男孩";
}
if ([title isEqualToString:@"学校"]) {
cell.aTextField.keyboardType = UIKeyboardTypeDefault;
cell.aTextField.placeholder = @"请输入学校名称";
cell.aTextField.text = (_model.schoolName) ?:@"";
cell.aTextField.delegate = self;
}
if ([title isEqualToString:@"班级"]) {
cell.aTextField.keyboardType = UIKeyboardTypeDefault;
cell.aTextField.placeholder = @"请输入班级";
cell.aTextField.text = (_model.className) ?:@"";
cell.aTextField.delegate = self;
}
if ([title isEqualToString:@"学号"]) {
cell.aTextField.keyboardType = UIKeyboardTypeDefault;
cell.aTextField.placeholder = @"请输入学号";
cell.aTextField.text = (_model.sno) ?:@"";
cell.aTextField.delegate = self;
}
if ([title isEqualToString:@"紧急联系人电话"]) {
cell.aTextField.keyboardType = UIKeyboardTypePhonePad;
cell.aTextField.placeholder = @"亲输入紧急联系人电话";
cell.aTextField.text = (_model.contactPhone) ?:@"";
cell.aTextField.delegate = self;
}
WEAKSELF
cell.block = ^(NSString *text, NewTableViewCell *blockCell){
blockCell.aTextField.text = text;
if ([title isEqualToString:@"性别"]) {
weakSelf.editDevice.sex = ([text isEqualToString:@"0"]) ? @"girl" : @"boy";
blockCell.aTextField.text = ([text isEqualToString:@"0"]) ? @"女孩" : @"男孩";
//需要刷新头部信息
[weakSelf.myTableView reloadRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:0 inSection:0]] withRowAnimation:UITableViewRowAnimationNone];
}else if ([title isEqualToString:@"学校"]) {
weakSelf.model.schoolName = text;
}else if([title isEqualToString:@"班级"]){
weakSelf.model.className = text;
}else if([title isEqualToString:@"学号"]){
weakSelf.model.sno = text;
}else if ([title isEqualToString:@"紧急联系人电话"]) {
weakSelf.model.contactPhone = text;
}
};
return cell;
// }
//return nil;
}
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
return [super tableView:tableView heightForHeaderInSection:section];
}
-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{
if (section == self.myDataSource.count-1) { //最后一个
if(self.isAdd){ // 是添加状态
if(!self.isShowAllInfo){ //且 未显示完整状态
return 50;
}
}else{
return 0.01;
}
}
return 0.01;
}
//MARK: UITextFieldDelegate 限制字数 和输入的 字符
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
// 实时输入数据
NSString *resultStr = [textField.text stringByReplacingCharactersInRange:range withString:string];
NSLog(@"1=%@,2=%@", resultStr, string);
if([self.nameTextField isEqual:textField]){
if(resultStr.length > 8){
return NO;
}else{
self.editDevice.name = resultStr;
return YES;
}
}
if([@"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" containsString:string]){
if(resultStr.length > 15){
return NO;
}else{
return YES;
}
}
else if([textField.placeholder isEqual:@"请输入学校名称"] || [textField.placeholder isEqual:@"班级"]) {
if ([self isInputRuleAndBlank:string] || [string isEqualToString:@""]) {
return YES;
}
if (resultStr.length >30) {
return NO;
}
return YES;
}
else {
if([string isEqualToString:@""]){
return YES;
}
return NO;
}
}
/**
* 字母、数字、中文正则判断(不包括空格)
*/
- (BOOL)isInputRuleNotBlank:(NSString *)str {
NSString *pattern = @"^[a-zA-Z\u4E00-\u9FA5\\d\\(\\)]*$";
NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", pattern];
BOOL isMatch = [pred evaluateWithObject:str];
return isMatch;
}
/**
* 字母、数字、中文正则判断(包括空格)【注意3】
*/
- (BOOL)isInputRuleAndBlank:(NSString *)str {
NSString *pattern = @"^[a-zA-Z\u4E00-\u9FA5\\d\\s]*$";
NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", pattern];
BOOL isMatch = [pred evaluateWithObject:str];
return isMatch;
}
@end