NSString UITextView без замены предыдущего текста - PullRequest
7 голосов
/ 31 января 2012

Как мне добавить текст к UITextView без замены предыдущего текста?

Пока у меня есть UITextView и UIButton, которые добавляют текст к UITextView, но я бы хотел, чтобы текстовое поле добавляло больше текста каждый раз, когда вы нажимаете кнопку вместо полного удаления текста и заменив его.

Ответы [ 4 ]

12 голосов
/ 31 января 2012

Вот несколько способов преодоления препятствий в разработке iOS:

  1. Посмотрите документацию для конкретного класса, которым вы пытаетесь манипулировать. В этом случае документацию UITextView можно найти в Xcode или online .

  2. Command-Click на UITextView или любом другом объекте в любом месте вашего кода, и он приведет вас к файлу заголовка для этого класса. Заголовочный файл будет содержать список всех открытых методов и свойств.

  3. Посмотрите на свой существующий код. Я предполагаю, что, поскольку у вас есть кнопка, которая добавляет текст к UITextView, вы понимаете, как установить его текст. В 99% случаев вы обнаружите, что любые методы установки (мутатора) будут иметь соответствующий метод получения (доступа). В этом случае UITextView имеет метод с именем setText: и метод сопоставления, который называется text.

Наконец, NSString имеет удобный метод, называемый stringWithFormat:, который вы можете использовать для объединения (объединения) двух строк, помимо прочего, очень полезных вещей. %@ - спецификатор формата для строки. Например, чтобы объединить две строки, stringOne и stringTwo, вы можете сделать следующее:

NSString *string = [NSString stringWithFormat:@"%@ %@", stringOne, stringTwo];

Я оставлю вас, чтобы придумать ответ о том, как объединить NSString stringWithFormat: и UITextField text и setText: для достижения того, чего вы хотели бы достичь.


Edit: ОП не смог выяснить, как использовать информацию выше, поэтому ниже приведен полный пример кода.

Предположим, у вас есть синтезированное свойство (возможно, IBOutlet) UITextView, которое вы инициализировали, с именем myTextView. Предположим также, что в данный момент мы находимся в области действия метода, который вызывается (ваш IBAction, если вы используете IB), когда вы нажимаете на UIButton.

[myTextView setText:[NSString stringWithFormat:@"%@ %@", myTextView.text, @"this is some new text"]];

Объяснение: myTextView.text захватывает существующий текст внутри UITextView, а затем вы просто добавляете к нему любую строку, которую хотите. Поэтому, если текстовое представление изначально заполнено текстом «Hello world» и вы три раза нажали кнопку, вы получите следующую последовательность действий:

Начальная строка: @ "Hello world"
Нажмите один: @ «Привет, мир, это какой-то новый текст»
Нажмите Два: @ «Привет, мир, это какой-то новый текст, это какой-то новый текст»
Нажмите Три: @ «Привет, мир, это какой-то новый текст, это какой-то новый текст, это какой-то новый текст»

2 голосов
/ 25 июля 2016

Более эффективный способ добавления текста - использовать replace() в конце:

extension UITextInput {
  func append(_ string : String) {
    let endOfDocument = self.endOfDocument
    if let atEnd = self.textRange(from: endOfDocument, to: endOfDocument) {
      self.replace(atEnd, withText: string)
    }
  }
}
2 голосов
/ 23 августа 2013

Если все, что вы делаете, это добавление текста, вам может показаться, что это немного проще:

myTextView.text = [myTextView stringByAppendingString:@"suffix\n"];

Я нашел это в UITextView вставить текст в текст textview . К сожалению, я не нашел способа добавить текст напрямую без полной замены текста в UITextView. Меня беспокоит, что прилагаемые усилия пропорциональны общей длине существующей строки и суффикса, а не только суффикса.

1 голос
/ 25 сентября 2014

@ Джек Лоуренс: Ваш ответ не полностью охватывает вопрос.

Приведенный ниже пример не будет аккуратно прокручиваться при запуске вниз, когда вызывается каждую секунду:

self.consoleView.text = [NSString stringWithFormat:@"%@%@%@", self.consoleView.text, data, @"\n"];
[self.consoleView scrollRangeToVisible:NSMakeRange(self.consoleView.text.length, 0)];

Это вызвано тем, что setText заменяет исходный текст каждый раз, тем самым сбрасывая связанные contentOffsets и т. Д.

Это было возможно до iOS 7, но, начиная с iOS 7, кажется, что setText не может препятствовать проявлению скачкообразного поведения. В этом сценарии добавление не представляется возможным для TextViews?

...