extension UITextView {
func resolveHashTags(){
let text:String = self.text
let nsText:NSString = self.text
let words:[NSString] = text.componentsSeparatedByStrings(["\n", " "])
let attrs = [
NSFontAttributeName : UIFont.systemFontOfSize(17.0)
]
let attrString = NSMutableAttributedString(string: nsText as String, attributes:attrs)
for word in words {
if word.hasPrefix("#") {
let hashTagWords:[NSString] = word.componentsSeparatedByString("#")
for var hashTagWord in hashTagWords {
hashTagWord = "#" + (hashTagWord as String)
let matchRange:NSRange = nsText.rangeOfString(hashTagWord as String)
let stringifiedWord:String = hashTagWord as String
attrString.addAttribute(NSLinkAttributeName, value: "hash:\(stringifiedWord)", range: matchRange)
}
}
}
self.attributedText = attrString
}
}
extension String {
func componentsSeparatedByStrings(separators: [String]) -> [String] {
return separators.reduce([self]) { result, separator in
return result.flatMap { $0.componentsSeparatedByString(separator) }
}
.map { $0.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet()) }
}
}
Github에서 공개된 소스에서 #단어가 붙어 있을때 (EX: #해시테그1#해시테그2#해시테그3) 도 인식하도록 변형 시켰다.
사용 방법은 textView에 resolveHashTag() 해주면 된다.
- 참고사이트
https://gist.github.com/IanKeen/429bf37d6335b64e03da
https://github.com/ribl/SwiftTextViewHashtag
추가 : 진행하다 보니 해당 소스는 영문에서만 인식이 가능하다;;
한글은 인식을 못하는데 NSLinkAttributedName에 한글 인식이 안되는 것 같다.
방법을 찾아보다가 결국엔 stringifiedWord에 숫자로 파라미터 값을 보내고
배열에 해시 태그 들을 저장해 놓고 배열의 순서대로 stringifiedWord 값을 인덱스로 사용해서 구현을 하였다.
구현된 소스는 https://github.com/azsha/AZHashtagTextView 에 올려두었습니다~
'Programer > iOS' 카테고리의 다른 글
[Swift] 날짜 변환 함수 (Date -> String) (0) | 2016.03.25 |
---|---|
[iOS] iOS 개발자 오픈채팅 방 링크 (3) | 2016.01.13 |
[iOS] 앱 배포시 필요한 인증서와 키, 주의해야 할 점 (0) | 2016.01.04 |
[Swift] UrlEncoding UTF-8 (0) | 2015.12.21 |
[Swift] tableViewContorler에서 navigation를 사용시 배경화면 문제 (1) | 2015.11.06 |