- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我实际上正在开发一个古兰经应用程序,我在其中使用 TextKit 来突出显示经文并更改它们的颜色。一切都很顺利,但我对出现多次的单词有点问题。首先,我的代码是:
import UIKit
class ViewController: UIViewController {
let attributedBackgroundColor = [ NSBackgroundColorAttributeName: UIColor.lightGray ]
var myVerses = ["بِسْمِ اللَّهِ الرَّحْمَنِ الرَّحِيمِ","الْحَمْدُ لِلَّهِ رَبِّ الْعَالَمِينَ","الرَّحْمَنِ الرَّحِيمِ","مَالِكِ يَوْمِ الدِّينِ","إِيَّاكَ نَعْبُدُ وَإِيَّاكَ نَسْتَعِينُ","اهدِنَا الصِّرَاطَ الْمُسْتَقِيمَ","صِرَاطَ الَّذِينَ أَنْعَمْتَ عَلَيْهِمْ غَيْرِ الْمَغْضُوبِ عَلَيْهِمْ وَلاَ الضَّالِّينَ"]
@IBOutlet weak var textView: UITextView!
override func viewDidLoad() {
super.viewDidLoad()
let string = NSMutableAttributedString(string: "Vide initialement")
string.addAttribute(NSFontAttributeName, value: UIFont.systemFont(ofSize: CGFloat(25.0)), range: NSRange(location: 0, length: string.length))
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.alignment = .center
string.addAttribute(NSParagraphStyleAttributeName, value: paragraphStyle, range: NSRange(location: 0, length: string.length))
textView.attributedText = string
let singleTap = UITapGestureRecognizer(target: self, action: #selector(ViewController.tapRecognized))
singleTap.numberOfTapsRequired = 1
textView.addGestureRecognizer(singleTap)
textView.isEditable = false
textView.isSelectable = false
var str = ""
// Ajouter numérotation aux verses - Add numerotation to verses.
for i in 0..<myVerses.count {
if i > 0 {
str += "("+"\(i)"+")"
}
str += String(myVerses[i])
}
print(str)
textView.text = str + "("+"\(myVerses.count)"+")"
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
// Sélection des verses - Select Verses
func tapRecognized(_ recognizer: UITapGestureRecognizer) {
if recognizer.state == .recognized {
let point = recognizer.location(in: recognizer.view)
let detectedText = self.getWordAtPosition(pos: point, in: textView)
if (detectedText != "") {
print("detectedText == \(detectedText)")
let string = NSMutableAttributedString(string: self.textView.text)
let verses = self.textView.text.components(separatedBy: ")")
if let detectedRange = textView.text.range(of: detectedText) {
let startPosOfSubstring = textView.text.distance(from: textView.text.startIndex, to: detectedRange.lowerBound)
let detectedLength = detectedText.characters.count
let rangeOfSub = (startPosOfSubstring,detectedLength)
print("-- rangeofSub == " ,rangeOfSub)
let rangeOfSubstring = NSRange(location: startPosOfSubstring, length: detectedLength)
for verse: String in verses {
if let detectedVerse = textView.text.range(of: verse) {
let startPosOfVerse = textView.text.distance(from: textView.text.startIndex, to: detectedVerse.lowerBound)
let detectedLengthOfVerse = verse.characters.count
let tupleVerse = (startPosOfVerse,detectedLengthOfVerse)
print("++ rangeofVerse == " ,tupleVerse)
let rangeOfVerse = NSRange(location: startPosOfVerse, length: detectedLengthOfVerse)
print(verse)
let range = (self.textView.text as NSString).range(of: verse)
let contained = NSLocationInRange(rangeOfSubstring.location, rangeOfVerse)
if (contained) {
print ("************************************")
print("contained is :" ,contained)
print ("************************************")
string.addAttribute(NSForegroundColorAttributeName, value: UIColor.red, range: range)
string.addAttribute(NSBackgroundColorAttributeName, value: UIColor.darkGray, range: range)
string.addAttribute(NSFontAttributeName, value: UIFont.systemFont(ofSize: CGFloat(25.0)), range: NSRange(location: 0, length: string.length))
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.alignment = .center
string.addAttribute(NSParagraphStyleAttributeName, value: paragraphStyle, range: NSRange(location: 0, length: string.length))
}
print ("--------------------------------------------")
}
}
self.textView.attributedText = string
} else {
print("detectedText is empty")
}
}
}
}
func getWordAtPosition( pos: CGPoint, in textview: UITextView) -> String {
//Eleminer le balancement du scroll - eliminate scroll offset
// var pos = pos
// pos.y += tv.contentOffset.y
//Position du text tapé au point - get location in text from textposition at point
let tapPos = textview.closestPosition(to: pos)
//Avoir le mot tapé dans la position du point - fetch the word at this position (or nil, if not available)
if let wr = textview.tokenizer.rangeEnclosingPosition(tapPos!, with: .word, inDirection: UITextLayoutDirection.right.rawValue) {
print(pos)
return textview.text(in: wr)!
}else{
return ""
}
}
}
当我在模拟器上运行我的应用程序时,我选择了一节经文,一切都很顺利。
正常使用:
问题出在多次出现的单词上。例如,对于出现两次的单词“الرحمن”,无论我选择第一个还是第二个,突出显示的诗句始终是第一个。
我做错了什么?提前致谢。
最佳答案
据我了解您的问题,您希望在用户选择整节经文中的特定单词时突出显示整节经文。
你逻辑中的问题是你确定了用户选择的词,但那个词不一定是唯一的,所以当你搜索这个词时(使用 textView.text.range(of: detectedText)
),你会得到第一个结果,它可能是也可能不是用户实际选择的结果。
如果分词器正确理解您的文本,一个潜在的解决方案是在确定用户的选择时使用不同的 TextGranularity
。而不是:
textview.tokenizer.rangeEnclosingPosition(tapPos!, with: .word, inDirection: UITextLayoutDirection.right.rawValue)
你可以试试:
textview.tokenizer.rangeEnclosingPosition(tapPos!, with: .sentence, inDirection: UITextLayoutDirection.right.rawValue)
关于swift - 使用 TextKit 突出显示单词,选择重复单词的错误出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41594532/
我从 objc.io 中获取了 TextKit 示例项目 #5 http://www.objc.io/issue-5/getting-to-know-textkit.html修改Text Intera
如果我有一个很长的 NSTextStorage 并且我知道 NSTextContainer 的 CGSize,我如何计算文本的页数?这个东西有没有标准的程序或某种动态计算的方法?我找不到好的教程来使用
示例项目:http://d.pr/f/1coXu 我正在使用 TextKit 将一些文本呈现为本质上是 UILabel 的非常基本的再创造。代码非常简单,在这个例子中只是将硬编码的 NSAttribu
我正在开发一个由 TextKit 支持的多页阅读应用程序,该应用程序基于 WWDC 2013 的“高级文本布局和文本工具包效果” session (但一些代码是根据不完整的示例重建的)。基本结构是预先
我正在尝试使用 UITextView 获得以下效果: 基本上我想在文本之间插入图像。图片只需占用 1 行空间,因此无需换行。 我试着只添加一个 UIView 到 subview : UIView *p
今天是个好日子。我在使用带有 textview 的 TextKit 显示带连字符的对齐文本时遇到问题。 我试图通过段落样式和 NSLayoutManager 进行连字符,但没有预期的结果。段落样式示例
我正在通过 TextKit 构建一个杂志应用程序,这里是一个 TextKit demo (查看 developer 分支)。它从 rtfd 文件中加载一个 NSAttributeString 作为文本
我实际上正在开发一个古兰经应用程序,我在其中使用 TextKit 来突出显示经文并更改它们的颜色。一切都很顺利,但我对出现多次的单词有点问题。首先,我的代码是: import UIKit cl
我在 Storyboard中有一个 UITextView 和一个 UINavigationController,它看起来像这样: 它在顶部有一个自动布局约束,以防止最上面的文本隐藏在导航栏下方,并且在
在我的应用程序中,如果可能的话,我需要使用 Objective-C 实现以下功能。我想知道是否可以从 UITextView 生成所选文本的屏幕截图。我知道这听起来像是一个奇怪的问题,但它是一项重要且必
我正在尝试在 iPad 上显示来自网站的 html 页面。我没有使用 UIWebview,而是使用了 Textkit,这样我就可以在多列中显示内容。我使用 iOS7 Day-by-Day day 21
有没有人有幸在 Swift 中创建文档的多页 View (一个 NSTextStorage、一个 NSLayoutManager 和多个 NSTextContainer)。我很难找到不在 object
我需要像 textkit swift 这样的东西来在我的应用程序中实现文本编辑器。问题是所有 textkit 代码示例和信息都在旧版本的 swift 中,swift 4 不支持它并且它有超过 100
留在 SpriteKit 中,是否可以使用 TextKit 提供的更强大的控制创建更多“艺术”文本,然后(以某种方式)将这些字符串转换为图像以便它们可以用作 SKSpriteNode? 我问是因为我想
在以前的 iOS 版本中,我的 UITextView 将滚动到底部使用 [displayText scrollRangeToVisible:NSMakeRange(0,[displayText.tex
我有一个 UIImage,它包含多个图像帧和一个从动画 GIF 文件切片在一起的持续时间。如果我在 UIWebView 中加载图像,它将按预期进行动画处理,但我想改用 UITextView。显而易见的
我的应用程序中使用了以下代码来更改带有 删除线 的 TextView 中的文本状态。现在我用 Objective-C 和 Swift 编写了一个小示例应用程序。正如您在屏幕截图中看到的那样,结果再次令
我假设我可以使用 TextKit 简洁地做到这一点。 我不需要向后兼容性。 我不想破坏任何现有的属性NSAttributedString 实例涉及。 我不一定介意子类化 UILabel,如果我能得到一
我想为标签设置样式。没有什么疯狂的,只是一些颜色,改变特定单词的字体大小,等等。我可以用 NSAttributedString 做到这一点,但是在 iOS 7 新引入的 TextKit 中这样做可能/
我是一名优秀的程序员,十分优秀!