Swift3 IOS 10 xcode 8 swift 3,UITextView滑动时更改文本

Swift3 IOS 10 xcode 8 swift 3,UITextView滑动时更改文本,swift3,uitextview,xcode8,ios10.3,Swift3,Uitextview,Xcode8,Ios10.3,有没有办法在滑动手势时更改一段文字?。当用户在段落上滑动时,我想用另一个预定义段落更改段落 我一直在检测段落,我们可以在它上面插入隐藏的标签或其他东西来检测段落的手势吗 我可以得到字符的索引,但是我如何才能得到段落对象或一种方法 override func viewDidLoad() { super.viewDidLoad() // set delegate for text view self.textView.delegate = self // set

有没有办法在滑动手势时更改一段文字?。当用户在段落上滑动时,我想用另一个预定义段落更改段落

我一直在检测段落,我们可以在它上面插入隐藏的标签或其他东西来检测段落的手势吗

我可以得到字符的索引,但是我如何才能得到段落对象或一种方法

override func viewDidLoad()
{
    super.viewDidLoad()

    // set delegate for text view
    self.textView.delegate = self

    // set the swipeGesture to the UITextView
    let swipe = UISwipeGestureRecognizer(target: self, action: #selector(self.swipeOnce(_:)))
    swipe.delegate = self
    swipe.direction = UISwipeGestureRecognizerDirection.left
    self.textView.addGestureRecognizer(swipe)

    // data
    var arrString = [String]()

    arrString.append("\n"+"5 Comme quelques-uns parlaient du temple, qui était orné de belles pierres et d'objets apportés en offrandes, Jésus dit:")
    arrString.append("\n"+"6 «Les jours viendront où il ne restera pas pierre sur pierre de ce que vous voyez, tout sera détruit.»")
    arrString.append("\n"+"7 Ils lui demandèrent: «Maître, quand donc cela arrivera-t-il et à quel signe reconnaîtra-t-on que ces événements vont se produire?»")
    arrString.append("\n"+"8 Jésus répondit: «Faites bien attention à ne pas vous laisser égarer. En effet, beaucoup viendront sous mon nom en disant:'C'est moi', et:'Le moment est arrivé.'Ne les suivez pas.")
    arrString.append("\n"+"9 Quand vous entendrez parler de guerres et de soulèvements, ne vous laissez pas effrayer, car il faut que ces choses arrivent d'abord. Cependant, ce ne sera pas encore la fin.»")
    arrString.append("\n"+"10 Puis il leur dit: «Une nation se dressera contre une nation et un royaume contre un royaume;")
    arrString.append("\n"+"11 il y aura de grands tremblements de terre en divers endroits, ainsi que des pestes et des famines; il y aura des phénomènes terrifiants et de grands signes dans le ciel.")
    arrString.append("\n"+"12 Mais, avant tout cela, on mettra la main sur vous et l'on vous persécutera, on vous livrera aux synagogues, on vous jettera en prison, on vous traînera devant des rois et devant des gouverneurs à cause de mon nom.")

    // set font
    let font = UIFont(name: "SourceSansPro-Regular", size: 20)
    let textFont = [NSFontAttributeName:font]

    let concat = NSMutableAttributedString()

    // set the paragraphe
    let count = arrString.count-1

    for x in 0...count {

        // Create a string that will be our paragraph
        let para = NSMutableAttributedString()

        // Create locally formatted strings
        let attrString = NSAttributedString(string: arrString[x], attributes:(textFont as Any as! [String : Any]))


        para.append(attrString)

        // Define paragraph styling
        let paraStyle = NSMutableParagraphStyle()
        //paraStyle.firstLineHeadIndent = 15.0
        //paraStyle.paragraphSpacingBefore = 10.0
        paraStyle.lineSpacing = 5

        // Apply paragraph styles to paragraph
        para.addAttribute(NSParagraphStyleAttributeName, value: paraStyle, range: NSRange(location: 0,length: para.length))

        // concat paragraphe
        concat.append(para)

    }

    // assign para
    textView.attributedText = concat
}

func swipeOnce(_ gestureRecognizer: UITapGestureRecognizer)
{
    // Get the location of the gesture recogniser in the text view
    let point:CGPoint = gestureRecognizer.location(in: self.textView)

    // Get the character index of the swipe
    let index:Int = self.textView.layoutManager.characterIndex(for: point, in: self.textView.textContainer, fractionOfDistanceBetweenInsertionPoints: nil)

    print(index);
}

谢谢。

您遇到的问题是面向对象编程,而不是Swift或UIKit API

以下是可能解决方案的一般结构:

1:在类属性中声明数据。

var arrString: [String] {
    var arrString = [String]()
    arrString.append("\n"+"5 Comme quelques-uns parlaient du temple, qui était orné de belles pierres et d'objets apportés en offrandes, Jésus dit:")
    arrString.append("\n"+"6 «Les jours viendront où il ne restera pas pierre sur pierre de ce que vous voyez, tout sera détruit.»")
    arrString.append("\n"+"7 Ils lui demandèrent: «Maître, quand donc cela arrivera-t-il et à quel signe reconnaîtra-t-on que ces événements vont se produire?»")
    arrString.append("\n"+"8 Jésus répondit: «Faites bien attention à ne pas vous laisser égarer. En effet, beaucoup viendront sous mon nom en disant:'C'est moi', et:'Le moment est arrivé.'Ne les suivez pas.")
    arrString.append("\n"+"9 Quand vous entendrez parler de guerres et de soulèvements, ne vous laissez pas effrayer, car il faut que ces choses arrivent d'abord. Cependant, ce ne sera pas encore la fin.»")
    arrString.append("\n"+"10 Puis il leur dit: «Une nation se dressera contre une nation et un royaume contre un royaume;")
    arrString.append("\n"+"11 il y aura de grands tremblements de terre en divers endroits, ainsi que des pestes et des famines; il y aura des phénomènes terrifiants et de grands signes dans le ciel.")
    arrString.append("\n"+"12 Mais, avant tout cela, on mettra la main sur vous et l'on vous persécutera, on vous livrera aux synagogues, on vous jettera en prison, on vous traînera devant des rois et devant des gouverneurs à cause de mon nom.")
    return arrString
}
var paragraphIndex = 0
func swipeOnce(_ gestureRecognizer: UISwipeGestureRecognizer) {
    paragraphIndex += 1
    if paragraphIndex > arrString.count - 1 { return }
    textView.text = arrString[paragraphIndex]
}
这将允许在类中的任何位置访问数据

2:创建另一个属性以跟踪当前段落。

var arrString: [String] {
    var arrString = [String]()
    arrString.append("\n"+"5 Comme quelques-uns parlaient du temple, qui était orné de belles pierres et d'objets apportés en offrandes, Jésus dit:")
    arrString.append("\n"+"6 «Les jours viendront où il ne restera pas pierre sur pierre de ce que vous voyez, tout sera détruit.»")
    arrString.append("\n"+"7 Ils lui demandèrent: «Maître, quand donc cela arrivera-t-il et à quel signe reconnaîtra-t-on que ces événements vont se produire?»")
    arrString.append("\n"+"8 Jésus répondit: «Faites bien attention à ne pas vous laisser égarer. En effet, beaucoup viendront sous mon nom en disant:'C'est moi', et:'Le moment est arrivé.'Ne les suivez pas.")
    arrString.append("\n"+"9 Quand vous entendrez parler de guerres et de soulèvements, ne vous laissez pas effrayer, car il faut que ces choses arrivent d'abord. Cependant, ce ne sera pas encore la fin.»")
    arrString.append("\n"+"10 Puis il leur dit: «Une nation se dressera contre une nation et un royaume contre un royaume;")
    arrString.append("\n"+"11 il y aura de grands tremblements de terre en divers endroits, ainsi que des pestes et des famines; il y aura des phénomènes terrifiants et de grands signes dans le ciel.")
    arrString.append("\n"+"12 Mais, avant tout cela, on mettra la main sur vous et l'on vous persécutera, on vous livrera aux synagogues, on vous jettera en prison, on vous traînera devant des rois et devant des gouverneurs à cause de mon nom.")
    return arrString
}
var paragraphIndex = 0
func swipeOnce(_ gestureRecognizer: UISwipeGestureRecognizer) {
    paragraphIndex += 1
    if paragraphIndex > arrString.count - 1 { return }
    textView.text = arrString[paragraphIndex]
}
3:修改滑动手势识别器的操作以更新文本视图中的文本。

var arrString: [String] {
    var arrString = [String]()
    arrString.append("\n"+"5 Comme quelques-uns parlaient du temple, qui était orné de belles pierres et d'objets apportés en offrandes, Jésus dit:")
    arrString.append("\n"+"6 «Les jours viendront où il ne restera pas pierre sur pierre de ce que vous voyez, tout sera détruit.»")
    arrString.append("\n"+"7 Ils lui demandèrent: «Maître, quand donc cela arrivera-t-il et à quel signe reconnaîtra-t-on que ces événements vont se produire?»")
    arrString.append("\n"+"8 Jésus répondit: «Faites bien attention à ne pas vous laisser égarer. En effet, beaucoup viendront sous mon nom en disant:'C'est moi', et:'Le moment est arrivé.'Ne les suivez pas.")
    arrString.append("\n"+"9 Quand vous entendrez parler de guerres et de soulèvements, ne vous laissez pas effrayer, car il faut que ces choses arrivent d'abord. Cependant, ce ne sera pas encore la fin.»")
    arrString.append("\n"+"10 Puis il leur dit: «Une nation se dressera contre une nation et un royaume contre un royaume;")
    arrString.append("\n"+"11 il y aura de grands tremblements de terre en divers endroits, ainsi que des pestes et des famines; il y aura des phénomènes terrifiants et de grands signes dans le ciel.")
    arrString.append("\n"+"12 Mais, avant tout cela, on mettra la main sur vous et l'on vous persécutera, on vous livrera aux synagogues, on vous jettera en prison, on vous traînera devant des rois et devant des gouverneurs à cause de mon nom.")
    return arrString
}
var paragraphIndex = 0
func swipeOnce(_ gestureRecognizer: UISwipeGestureRecognizer) {
    paragraphIndex += 1
    if paragraphIndex > arrString.count - 1 { return }
    textView.text = arrString[paragraphIndex]
}
这将增加段落跟踪器,检查以确保它是有效的索引,并替换文本视图中的文本


这不是最佳或最干净的解决方案,但需要在当前代码和工作解决方案之间进行最少的更改。

将字符串数组设置为类属性,以便您可以从滑动手势识别器的操作方法访问它。感谢您的时间,但可能我没有正确地表达自己,或者我不理解你的代码,但我需要的是例如:文本5到12通过viewDidLoad()基金显示在iPhone屏幕上,我在文本9上滑动,我想使用SwipOnce func,检测到我滑动了文本9,并最终替换该文本:PSo只需使用多个UITextView,每个段落一个。在每个文本视图上使用滑动手势识别器。哇,这是个好主意!