Objective-C 텍스트에서 문자열을 검색하고 색상을 지정합니다.

2941 단어 XcodeiOSObjective-C

문장에서 문자열을 검색하는 단계


  • (NSRange)rangeOfString:(NSString *)searchString options:(NSStringCompareOptions)mask range:(NSRange)searchRange;를 사용하여 NSRange 가져오기

  • 2. NSRange를 배열에 저장하고 싶습니다.

    3. NSRange는 객체 타입이 아니므로 NSValue로 객체 타입으로 변환
    -(NSArray*)searchWordWithRange:(NSString*)targetText word:(NSString*)
    searchWord
    {
        //! rangeオブジェクト(NSValue)の格納配列
        NSMutableArray* arrayRangeValue = [[NSMutableArray alloc] init];
        //! range初期化
        NSRange range = NSMakeRange(0, targetText.length);
        //! targetTextから検索 見つからなかったらwhile文を抜ける
        while ([targetText rangeOfString:searchWord options:NSLiteralSearch
                                   range:range].location != NSNotFound) {
            //! 発見したrange
            NSRange rangeDetect = [targetText rangeOfString:searchWord
                                                    options:NSLiteralSearch range:range];
            //! NSRangeをNSValueに変換
            [arrayRangeValue addObject:[NSValue valueWithRange:rangeDetect]];
            //! rangeのオフセット変更
            range = NSMakeRange(rangeDetect.location+rangeDetect.length,
                                targetText.length - (rangeDetect.location+rangeDetect.length));
        }
        return arrayRangeValue;
    }
    

    NSRange(NSValue)를 포함한 배열과 텍스트 본문을 인수로 하여 색을 붙이는 함수


    -(NSAttributedString*)highlightStringByRanges:(NSString*)targetText
                                           ranges:(NSArray*)arrayRange
    {
        NSMutableAttributedString* stringAttributed = [[
                                                        NSMutableAttributedString alloc] initWithString:targetText
    
                                                       attributes:nil];
        for (NSValue* rangeObject in arrayRange) {
            NSRange range = [rangeObject rangeValue];
            [stringAttributed addAttribute:NSBackgroundColorAttributeName 
                                     value:[UIColor cyanColor] range:range];
        }
        return stringAttributed;
    }
    

    ViewDidLoad에서 위의 두 가지 메서드 호출


    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
        NSBundle* bundle = [NSBundle mainBundle];
        //! 青空文庫の「こころ」を取得
        NSString* stringPath = [bundle pathForResource:@"kokoro" ofType:@"txt"];
        NSString* stringText = [NSString stringWithContentsOfFile:stringPath encoding:NSShiftJISStringEncoding error:nil];
        //! "私"を検索
        NSArray* arrayRange = [self searchWordWithRange:stringText word:@"私"];
        //! UITextViewのattributedTextに設定すること
        _textview.attributedText = [self highlightStringByRanges:stringText ranges:arrayRange];
    
    }
    

    나츠메 소세키의 "마음"에서 "나"를 검색 한 결과



    좋은 웹페이지 즐겨찾기