gpt4 book ai didi

iOS - 如何在从远程服务流式传输时在 UITextView 中开始新行

转载 作者:行者123 更新时间:2023-11-30 10:53:53 25 4
gpt4 key购买 nike

在我的 ios 应用程序中,我将文本从远程服务流式传输到 UITextView。

 @IBOutlet weak var streamingResult: UITextView!

// Store streaming results in a String called results
var results : String = ""

我不知道什么时候有短信进来。但每当有暂停时,我想在 UILabel 上开始一个新行。

所以我求助于使用 NSTimer 来检测何时没有文本 3 秒,如下所示:

var timer = NSTimer.scheduledTimerWithTimeInterval(3, target: self, 
selector: "pauseExists", userInfo: nil, repeats: false)

当没有文本输入时,我的选择器按预期被点击,我尝试添加一个新行字符,如下所示:

@objc func pauseExists() {
print("No stream for 3 seconds")

guard let currentText = self.streamingResult.text else { return }
if !currentText.isEmpty {
self.results.append("\n")
self.streamingResult.text = self.results
}
}

这不起作用,下一个结果会立即添加到上一个结果之后。这样做的正确方法是什么?

最佳答案

这里有一个更好的例子。使用 UITextView 代替。它更好,并且带有免费的 UIScroll。

let label : UITextView = {
let label = UITextView()
label.backgroundColor = .red
label.isEditable = false
return label
}()

lazy var appendButton : UIButton = {
let button = UIButton()
button.setTitle("Append", for: .normal)
button.backgroundColor = .red
return button
}()

var foo : String = ""

override func viewDidLoad() {
super.viewDidLoad()

self.view.addSubview(appendButton)
appendButton.translatesAutoresizingMaskIntoConstraints = false
appendButton.topAnchor.constraint(equalTo: self.view.topAnchor).isActive = true
appendButton.heightAnchor.constraint(equalToConstant: 100).isActive = true
appendButton.leadingAnchor.constraint(equalTo: self.view.leadingAnchor).isActive = true
appendButton.trailingAnchor.constraint(equalTo: self.view.trailingAnchor).isActive = true
appendButton.addTarget(self, action: #selector(appendButtonPressed), for: .touchUpInside)


self.view.addSubview(label)
label.translatesAutoresizingMaskIntoConstraints = false
label.centerXAnchor.constraint(equalTo: self.view.centerXAnchor).isActive = true
label.centerYAnchor.constraint(equalTo: self.view.centerYAnchor).isActive = true
label.widthAnchor.constraint(equalToConstant: 200).isActive = true
label.heightAnchor.constraint(equalToConstant: 200).isActive = true

var timer = Timer.scheduledTimer(timeInterval: 3, target: self, selector: #selector(self.pauseExists), userInfo: nil, repeats: true)
}

@objc func pauseExists() {
print("No stream for 1 second")
foo.append("\n")
label.text = foo
}

@objc func appendButtonPressed (sender: UIButton!) {
foo.append("New Line")
label.text = foo
}

在空项目中运行此代码,您将看到每次按“追加”按钮时如何追加新行。希望对您有帮助

关于iOS - 如何在从远程服务流式传输时在 UITextView 中开始新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54171997/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com