国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > iOS > 正文

iOS UITextView 首行縮進(jìn) 撤銷輸入 反撤銷輸入的實(shí)現(xiàn)代碼

2020-07-26 02:40:57
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

 最近公司涉及到作家助手的功能,能撤銷輸入的文字,并能反撤銷被撤銷掉的文字。

該功能類似ios系統(tǒng)的搖一搖撤銷輸入。

當(dāng)時(shí)也特迷茫,不知道從何下手,后來(lái)搜索了大量的資料,終于完成了這個(gè)功能,現(xiàn)在就將該功能的實(shí)現(xiàn)寫出來(lái),共勉。

這個(gè)功能涉及到ios原生類:NSUndomanager。這個(gè)類挺強(qiáng)大。廢話不多說(shuō),直接上代碼。

#import "ViewController.h"@interface ViewController ()<UITextViewDelegate>{  UITextView *_textView;  NSUndoManager *_undomanager;  NSInteger _length;  UIButton *undobutton;  UIButton *redobutton;}@end@implementation ViewController- (void)viewDidLoad {  [super viewDidLoad];  UIBarButtonItem *undoItem = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemUndo target:self action:@selector(undoitem)];  UIBarButtonItem *redoItem = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemRedo target:self action:@selector(redoitem)];  self.navigationItem.leftBarButtonItem = undoItem;  self.navigationItem.rightBarButtonItem = redoItem;  [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyBoardShow:) name:UIKeyboardWillShowNotification object:nil];  [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyBoardHidden:) name:UIKeyboardWillHideNotification object:nil];  _length = 0;//初始化NSUndoManager  _undomanager = [[NSUndoManager alloc] init];  _textView = [[UITextView alloc]initWithFrame:CGRectMake(0, 200, self.view.frame.size.width, 400)];  _textView.backgroundColor = [UIColor yellowColor];  _textView.delegate = self;  _textView.font = [UIFont systemFontOfSize:15];  _textView.layer.cornerRadius = 5;  _textView.layer.masksToBounds = YES;  _textView.textColor = [UIColor blackColor];  _textView.text = @" ";//要設(shè)置初始文本,不然段落體現(xiàn)不出來(lái)。  NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];  paragraphStyle.lineSpacing = 5;  //行間距  paragraphStyle.firstLineHeadIndent = 30;  /**首行縮進(jìn)寬度*/  paragraphStyle.alignment = NSTextAlignmentLeft;  NSDictionary *attributes = @{                 NSFontAttributeName:[UIFont systemFontOfSize:13],                 NSParagraphStyleAttributeName:paragraphStyle                 };  _textView.attributedText = [[NSAttributedString alloc] initWithString:_textView.text attributes:attributes];//監(jiān)聽(tīng)textview文本改動(dòng)的通知 [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(changeTextViewText) name:UITextViewTextDidChangeNotification object:nil];  [self.view addSubview:_textView];}-(void)redoitem{  //反撤銷  [_undomanager redo];}-(void)undoitem{  //撤銷  [_undomanager undo];}-(void)keyBoardShow:(NSNotification *)noti{  NSDictionary *dic = noti.userInfo;  NSValue *aValue = [dic objectForKey:UIKeyboardFrameEndUserInfoKey];  CGRect keyboardRect = [aValue CGRectValue];  int height = keyboardRect.size.height;  [_textView setContentInset:UIEdgeInsetsMake(0, 0, height, 0)];}-(void)keyBoardHidden:(NSNotification *)noti{  [_textView setContentInset:UIEdgeInsetsMake(0, 0, 0, 0)];}- (void)setMyObjectTitle:(NSString *)newTitle{  //判斷當(dāng)前NSUndoManager的狀態(tài),是處于撤銷或者反撤銷的狀態(tài)-(void)textViewDidChange:(UITextView *)textView  if (_undomanager.isUndoing) {    NSInteger length = newTitle.length;    if (_textView.text.length>0) {      //獲取       _textView.text = [_textView.text substringWithRange:NSMakeRange(0, _textView.text.length - length)];      [_undomanager registerUndoWithTarget:self                    selector:@selector(setMyObjectTitle:)                     object:newTitle];    }  }else if (_undomanager.isRedoing){    _textView.text = [_textView.text stringByAppendingString:newTitle];    [_undomanager registerUndoWithTarget:self                  selector:@selector(setMyObjectTitle:)                   object:newTitle];  }else{    NSString *currentText = _textView.text;    if (newTitle != currentText) {      _textView.text = currentText;      [_undomanager registerUndoWithTarget:self                    selector:@selector(setMyObjectTitle:)                     object:newTitle];    }else{      _textView.text = newTitle;    }  }}-(void)changeTextViewText{  if (_textView.text.length>0) {    undobutton.enabled = YES;  }else{    undobutton.enabled = NO;    redobutton.enabled = NO;  }  NSString *text ;  if (_length != 0) {    NSInteger textLength = _textView.text.length;    if (textLength > _length) {      NSInteger newLength = textLength - _length;      text = [NSString stringWithFormat:@"%@",[_textView.text substringWithRange:NSMakeRange(_length, newLength)]];    }else{      text = _textView.text;    }  }else{    text = _textView.text;  }  _length = _textView.text.length;  [self setMyObjectTitle:text];}

總結(jié)

以上所述是小編給大家介紹的iOS UITextView 首行縮進(jìn) 撤銷輸入 反撤銷輸入的實(shí)現(xiàn)代碼,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)武林網(wǎng)網(wǎng)站的支持!

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 沁源县| 淄博市| 六枝特区| 凤台县| 台前县| 常熟市| 平度市| 梧州市| 伊川县| 鹤壁市| 舒城县| 东港市| 石柱| 昭平县| 红河县| 调兵山市| 修文县| 日喀则市| 施秉县| 宜春市| 板桥市| 万源市| 岳阳县| 南澳县| 辽阳市| 德化县| 申扎县| 闸北区| 上饶县| 云南省| 福州市| 双城市| 通江县| 延长县| 东辽县| 德令哈市| 焦作市| 晋城| 阿鲁科尔沁旗| 雷州市| 台安县|