iOS - Как начать новую строку в UITextView при потоковой передаче из удаленного сервиса - PullRequest
0 голосов
/ 13 января 2019

В моем приложении 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
    } 
}

Это не работает, следующий результат добавляется сразу после предыдущего. Как правильно это сделать?

1 Ответ

0 голосов
/ 13 января 2019

Вот лучший пример для вас. Вместо этого используйте 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
}

Запустите этот код в пустом проекте, и вы увидите, как новые строки добавляются при каждом нажатии кнопки «Добавить». Надеюсь, это поможет

...