//
|
// PBSafetyTableViewCell.m
|
// IphoneBIMe
|
//
|
// Created by ZhangJF on 2022/8/31.
|
// Copyright © 2022 ProBIM. All rights reserved.
|
//
|
|
#import "PBSafetyTableViewCell.h"
|
#import "PBSafetyModel.h"
|
|
#define maxTextCount 200
|
@interface PBSafetyTableViewCell()<UITextViewDelegate>
|
@property (nonatomic, weak) UITextView *textView;
|
@property (nonatomic, weak) UILabel *promptL;
|
@property (nonatomic, weak) UITextView *text1View;
|
@property (nonatomic, weak) UILabel *prompt1L;
|
@property (nonatomic, weak) UILabel *taskNameL;
|
//@property (nonatomic, strong) UIToolbar *kbToolbar;
|
@end
|
@implementation PBSafetyTableViewCell
|
|
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
|
if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
|
[self setupUI];
|
}
|
return self;
|
}
|
- (void)setupUI {
|
UIButton *deleteBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"delete_task"]];
|
[deleteBtn addTarget:self action:@selector(deleteAction) forControlEvents:UIControlEventTouchUpInside];
|
[self.contentView addSubview:deleteBtn];
|
[deleteBtn mas_makeConstraints:^(MASConstraintMaker *make) {
|
make.top.equalTo(self.contentView).offset(6);
|
make.left.equalTo(self.contentView).offset(12);
|
make.size.mas_equalTo(CGSizeMake(20, 20));
|
}];
|
UILabel *taskNameL = [UILabel z_labelWithText:@"风险1" Color:[UIColor z_colorWithR:95 G:158 B:249] isBold:YES Font:14];
|
[self.contentView addSubview:taskNameL];
|
[taskNameL mas_makeConstraints:^(MASConstraintMaker *make) {
|
make.centerY.equalTo(deleteBtn);
|
make.left.equalTo(deleteBtn.mas_right).offset(8);
|
}];
|
|
UIView *bgView = [[UIView alloc] init];
|
bgView.backgroundColor = [UIColor whiteColor];
|
[self.contentView addSubview:bgView];
|
[bgView mas_makeConstraints:^(MASConstraintMaker *make) {
|
make.top.equalTo(deleteBtn.mas_bottom).offset(6);
|
make.left.equalTo(self.contentView).offset(12);
|
make.right.equalTo(self.contentView).offset(-12);
|
make.height.equalTo(@132);
|
}];
|
bgView.layer.cornerRadius = 4;
|
bgView.layer.borderWidth = 1;
|
bgView.layer.borderColor = PBColor(108, 108, 108).CGColor;
|
|
UITextView *textView = [[UITextView alloc] init];
|
textView.textColor= PBColor(40, 58, 79);
|
textView.font = [UIFont boldSystemFontOfSize:15];
|
// [textView becomeFirstResponder];
|
textView.delegate = self;
|
// textView.text = _text;
|
[bgView addSubview:textView];
|
[textView mas_makeConstraints:^(MASConstraintMaker *make) {
|
make.top.equalTo(bgView).offset(12);
|
make.left.equalTo(bgView).offset(12);
|
make.right.equalTo(bgView).offset(-12);
|
make.bottom.equalTo(bgView).offset(-12);
|
}];
|
// textView.inputAccessoryView = self.kbToolbar;
|
|
UILabel *promptL= [UILabel z_labelWithText:@"请输入..." Color:PBColor(97, 111, 125) isBold:YES Font:15];
|
[bgView addSubview:promptL];
|
[promptL mas_makeConstraints:^(MASConstraintMaker *make) {
|
make.top.equalTo(textView).offset(8);
|
make.left.equalTo(textView).offset(6);
|
}];
|
|
UILabel *measureL = [UILabel z_labelWithText:@"措施" Color:[UIColor z_colorWithR:51 G:51 B:51] isBold:YES Font:14];
|
[self.contentView addSubview:measureL];
|
[measureL mas_makeConstraints:^(MASConstraintMaker *make) {
|
make.top.equalTo(bgView.mas_bottom).offset(20);
|
make.left.equalTo(bgView);
|
}];
|
|
UIView *bg1View = [[UIView alloc] init];
|
bg1View.backgroundColor = [UIColor whiteColor];
|
[self.contentView addSubview:bg1View];
|
[bg1View mas_makeConstraints:^(MASConstraintMaker *make) {
|
make.top.equalTo(measureL.mas_bottom).offset(6);
|
make.left.equalTo(bgView);
|
make.right.equalTo(bgView);
|
make.height.equalTo(@132);
|
make.bottom.equalTo(self.contentView).offset(-20);
|
}];
|
bg1View.layer.cornerRadius = 4;
|
bg1View.layer.borderWidth = 1;
|
bg1View.layer.borderColor = PBColor(108, 108, 108).CGColor;
|
|
UITextView *text1View = [[UITextView alloc] init];
|
text1View.textColor= PBColor(40, 58, 79);
|
text1View.font = [UIFont boldSystemFontOfSize:15];
|
// [textView becomeFirstResponder];
|
text1View.delegate = self;
|
// textView.text = _text;
|
[bg1View addSubview:text1View];
|
[text1View mas_makeConstraints:^(MASConstraintMaker *make) {
|
make.top.equalTo(bg1View).offset(12);
|
make.left.equalTo(bg1View).offset(12);
|
make.right.equalTo(bg1View).offset(-12);
|
make.bottom.equalTo(bg1View).offset(-12);
|
}];
|
// text1View.inputAccessoryView = self.kbToolbar;
|
|
UILabel *prompt1L= [UILabel z_labelWithText:@"请输入..." Color:PBColor(97, 111, 125) isBold:YES Font:15];
|
[bg1View addSubview:prompt1L];
|
[prompt1L mas_makeConstraints:^(MASConstraintMaker *make) {
|
make.top.equalTo(text1View).offset(8);
|
make.left.equalTo(text1View).offset(6);
|
}];
|
|
self.textView = textView;
|
self.promptL = promptL;
|
self.text1View = text1View;
|
self.prompt1L = prompt1L;
|
self.taskNameL = taskNameL;
|
|
}
|
- (void)deleteAction {
|
if (self.DeleteBlock) {
|
self.DeleteBlock();
|
}
|
}
|
|
- (void)setSafetyModel:(PBSafetyModel *)safetyModel {
|
_safetyModel = safetyModel;
|
self.textView.text = safetyModel.MobileSafe_Name;
|
if (self.textView.text.length == 0) {
|
self.promptL.hidden = NO;
|
}else {
|
self.promptL.hidden = YES;
|
}
|
self.text1View.text = safetyModel.MobileSafe_Measure;
|
if (self.text1View.text.length == 0) {
|
self.prompt1L.hidden = NO;
|
}else {
|
self.prompt1L.hidden = YES;
|
}
|
self.textView.editable = YES;
|
self.text1View.editable = YES;
|
}
|
|
- (void)setSafetyIndex:(NSInteger)safetyIndex {
|
_safetyIndex = safetyIndex;
|
self.taskNameL.text = [NSString stringWithFormat:@"风险%zd",safetyIndex];
|
}
|
//- (UIToolbar *) kbToolbar {
|
// if (_kbToolbar == nil) {
|
// _kbToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, MainScreenWidth, 44)];
|
// UIBarButtonItem *doneItem = [[UIBarButtonItem alloc] initWithTitle:@"完成" style:UIBarButtonItemStyleDone target:self action:@selector(closeKeyboard)];
|
// _kbToolbar.items = @[[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil], doneItem];
|
// }
|
// return _kbToolbar;
|
//}
|
//- (void)closeKeyboard {
|
// [self endEditing:YES];
|
//}
|
|
#pragma mark - UITextViewDelete
|
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range
|
replacementText:(NSString *)text {
|
NSLog(@"%zd",textView.text.length);
|
NSLog(@"===shouldChangeText");
|
UITextRange *selectedRange = [textView markedTextRange];
|
//获取高亮部分
|
UITextPosition *pos = [textView positionFromPosition:selectedRange.start offset:0];
|
//获取高亮部分内容
|
//NSString * selectedtext = [textView textInRange:selectedRange];
|
//如果有高亮且当前字数开始位置小于最大限制时允许输入
|
if (selectedRange && pos) {
|
NSInteger startOffset = [textView offsetFromPosition:textView.beginningOfDocument toPosition:selectedRange.start];
|
NSInteger endOffset = [textView offsetFromPosition:textView.beginningOfDocument toPosition:selectedRange.end];
|
NSRange offsetRange = NSMakeRange(startOffset, endOffset - startOffset);
|
if (offsetRange.location < maxTextCount) {
|
return YES;
|
}
|
else{
|
return NO;
|
}
|
}
|
NSString *comcatstr = [textView.text stringByReplacingCharactersInRange:range withString:text];
|
NSInteger caninputlen = maxTextCount - comcatstr.length;
|
if (caninputlen >= 0){
|
return YES;
|
}else{
|
NSInteger len = text.length + caninputlen;
|
//防止当text.length + caninputlen < 0时,使得rg.length为一个非法最大正数出错
|
NSRange rg = {0,MAX(len,0)};
|
if (rg.length > 0){
|
NSString *s = @"";
|
//判断是否只普通的字符或asc码(对于中文和表情返回NO)
|
BOOL asc = [text canBeConvertedToEncoding:NSASCIIStringEncoding];
|
if (asc) {
|
s = [text substringWithRange:rg];//因为是ascii码直接取就可以了不会错
|
}else{
|
__block NSInteger idx = 0;
|
__block NSString *trimString = @"";//截取出的字串
|
//使用字符串遍历,这个方法能准确知道每个emoji是占一个unicode还是两个
|
[text enumerateSubstringsInRange:NSMakeRange(0, [text length])
|
options:NSStringEnumerationByComposedCharacterSequences
|
usingBlock: ^(NSString* substring, NSRange substringRange, NSRange enclosingRange, BOOL* stop) {
|
if (idx >= rg.length) {
|
*stop = YES; //取出所需要就break,提高效率
|
return ;
|
}
|
trimString = [trimString stringByAppendingString:substring];
|
idx++;
|
}];
|
s = trimString;
|
}
|
//rang是指从当前光标处进行替换处理(注意如果执行此句后面返回的是YES会触发didchange事件)
|
[textView setText:[textView.text stringByReplacingCharactersInRange:range withString:s]];
|
//既然是超出部分截取了,哪一定是最大限制了。
|
// self.textLengthL.text = [NSString stringWithFormat:@"%d/%ld",0,(long)maxTextCount];
|
}
|
return NO;
|
}
|
}
|
|
|
- (void)textViewDidChange:(UITextView *)textView{
|
if (textView.text.length == 0) {
|
if (textView == self.textView) {
|
self.promptL.hidden = NO;
|
}else {
|
self.prompt1L.hidden = NO;
|
}
|
}else {
|
if (textView == self.textView) {
|
self.promptL.hidden = YES;
|
}else {
|
self.prompt1L.hidden = YES;
|
}
|
}
|
NSLog(@"===DidChangeText");
|
UITextRange *selectedRange = [textView markedTextRange];
|
//获取高亮部分
|
UITextPosition *pos = [textView positionFromPosition:selectedRange.start offset:0];
|
//如果在变化中是高亮部分在变,就不要计算字符了
|
if (selectedRange && pos) {
|
return;
|
}
|
NSString *nsTextContent = textView.text;
|
NSInteger existTextNum = nsTextContent.length;
|
if (existTextNum > maxTextCount){
|
//截取到最大位置的字符(由于超出截部分在should时被处理了所在这里这了提高效率不再判断)
|
NSString *s = [nsTextContent substringToIndex:maxTextCount];
|
[textView setText:s];
|
}
|
if (textView == self.textView) {
|
self.safetyModel.MobileSafe_Name = textView.text;
|
}else {
|
self.safetyModel.MobileSafe_Measure = textView.text;
|
}
|
}
|
//- (BOOL)textViewShouldEndEditing:(UITextView *)textView {
|
// if (self.endEditBlock) {
|
// self.endEditBlock(textView.text);
|
// }
|
// return YES;
|
//}
|
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
|
[super setSelected:selected animated:animated];
|
|
// Configure the view for the selected state
|
}
|
|
@end
|