2010-10-07 4 views
10

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

+0

Я делаю это через XCODE. Что мне делать в этом случае? – Abhinav

ответ

9

просто сделайте 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{ 
    [email protected]""; 
} 

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

+0

безупречный. Благодарю. – Abhinav

+3

сталкиваются с той же потребностью, где можно получить этот cross.png? – tom

1

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

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

0

Для меня изменения .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) просто добавьте UIButton к контроллеру и поместите его в верхнем правом углу базового UIView.

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

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

11

На основании ответа от 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

+0

Отличный ответ, но с поддержкой XCode 6 при использовании AutoLayout мне пришлось отказаться от создания кнопки программно, так как вы должны добавить Constraints, чтобы убедиться, что она отображается в нужном месте. В конце я добавил UIButton прямо на Storyboard и добавил там ограничения. (Sigh ...) –

5

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

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

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

enter image description here

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

+0

Спасибо! Именно то, что мне нужно. – ninjudd

+5

(Sigh.) Вопрос состоял в том, как добавить кнопку Clear в UITextView (а не UITextField) ... и у этого нет функции члена ClearButtonMode ... !! –

+0

@Mike Gledhill, только что обновил ответ, чтобы ответить на ваш комментарий, я думаю, что для чего-то вроде очистки «UITextView» вам будет лучше с четкой кнопкой (т. Е. 'UIButton'). Я просто не вижу, как кнопка X clear будет работать с многострочными текстовыми представлениями. – Zorayr

Смежные вопросы