Кнопка очистки на UITextView - PullRequest
       6

Кнопка очистки на UITextView

10 голосов
/ 07 октября 2010

Как я могу добавить кнопку очистки (крестик внутри круга) для UITextView, как UITextField имеет?

Ответы [ 6 ]

11 голосов
/ 16 июля 2014

На основе ответа от GhostRider более точная и актуальная реализация:

int kClearButtonWidth = 15;
int kClearButtonHeight = kClearButtonWidth;

//add the clear button
self.clearButton = [UIButton buttonWithType:UIButtonTypeCustom];
[self.clearButton setImage:[UIImage imageNamed:@"UITextFieldClearButton.png"] forState:UIControlStateNormal];
[self.clearButton setImage:[UIImage imageNamed:@"UITextFieldClearButtonPressed.png"] forState:UIControlStateHighlighted];

self.clearButton.frame = CGRectMake(0, 0, kClearButtonWidth, kClearButtonHeight);
self.clearButton.center = CGPointMake(self.textView.frame.size.width - kClearButtonWidth , kClearButtonHeight);

[self.clearButton addTarget:self action:@selector(clearTextView:) forControlEvents:UIControlEventTouchUpInside];

[self.textView addSubview:self.clearButton];

И метод

- (void)clearTextView:(id)sender{
    self.textView.text = @"";
}

Вы можете использовать эти изображения для двух состоянийкнопка:

UITextFieldButton UITextFieldButtonPressed

9 голосов
/ 07 октября 2010

просто создайте uibutton, поместите его в uitextview и установите его действие для просмотра открытого текста;

uitextview.frame = (0,0,320,416);

uibutton.frame = (310,0,10,10);
[uibutton setimage:@"cross.png" forcontrolstate:uicontrolstatenoraml];
[uibutton addTarget:self action:@selector(clearButtonSelected:) forControlEvents:UIControlEventTouchUpInside];

-(void)clearButtonSelected{
    uitextview=@"";
}

надеюсь, что вы хотите очистить текстовое представление текста, когда вы нажимаете на крестик над кнопкой если не понимаю, тогда я могу отправить вам соответствующую программу для этого

7 голосов
/ 04 сентября 2014

С точки зрения продукта, если у вас будет кнопка очистки, вы, вероятно, захотите использовать UITextField вместо UITextView, а UITextField изначально поддерживает кнопку очистки - установите свойство clearButtonMode как например:

UITextField *textfield = ...;
textfield.clearButtonMode = UITextFieldViewModeAlways;

Смотрите скриншот:

enter image description here

Вы можете использовать UITextFieldViewModeWhileEditing, чтобы отображать кнопку очистки только тогда, когда пользователь активно обновляет содержимое.

1 голос
/ 07 октября 2010

Там нет ничего встроенного, как для UITextField. Вам нужно было бы добавить представление самостоятельно (вероятно, UIButton) и правильно разместить его, а также каким-то образом заставить текст правильно обернуть его. (И я не думаю, что последнее действительно возможно.)

Возможно, вместо этого вы должны отобразить панель инструментов над клавиатурой (или inputAccessoryView, если вы нацеливаетесь на 3.2 и более поздние версии) с кнопкой очистки.

0 голосов
/ 05 октября 2018

Вы можете добавить кнопку очистки, как на скриншоте с минимальным кодированием. Просто выполните следующие действия:

  • Выберите раскадровку и перетащите кнопку UIB в свой UITextView
  • Установить ограничения кнопок
  • Назначение заголовка или фонового изображения
  • Создайте ссылку IBOutlet кнопки и действие (см. onClearPressed(_:) ниже) для «Touch Up Inside» в ViewController
  • Реализуйте метод делегата textViewDidChange(_:) UITextViewDelegate и убедитесь, что свойство кнопки isEnabled установлено на основе содержимого текстового поля, например ::

func textViewDidChange(_ textView: UITextView) { clearButton.isEnabled = !textView.text.isEmpty }

  • Выполнить действие onClearPressed(_:):

@IBAction func onClearPressed(_ sender: Any) { textView.text = "" clearButton.isEnabled = false }

Вот и все.

clear button in UTextView

0 голосов
/ 12 сентября 2012

Для меня изменение свойств .frame или .contentInset не сработало.

Для меня лучший результат получился:

1) добавление UIView к контроллеру, округление углов и границы для имитации UITextView.

self.viewTextBackground.layer.borderColor = [UIColor colorWithRed:171/255.0 green:171/255.0 blue:171/255.0 alpha:1.0].CGColor;
self.viewTextBackground.layer.borderWidth = 1.0f;
self.viewTextBackground.layer.cornerRadius = 9.0f;

2) поместите UITextView поверх этого UIView. Разместите его так, чтобы границы нижележащего UIView оставались видимыми.

3) дать UITextView круглые углы:

self.textNote.layer.cornerRadius = 9.0f;

3) Сделать его шириной fe. На 30 пикселей меньше по сравнению с базовым UIView. Теперь у вас есть место для кнопки очистки.

4) просто добавьте кнопку UIB к контроллеру и поместите ее в верхний правый угол нижележащего UIView.

5) измените свойства кнопки: установите ее тип на «пользовательский» и установите для ее изображения изображение серого креста.

6) привязать действие к кнопке, чтобы очистить UITextView

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...