Clear button on UITextView

不问归期 提交于 2020-01-10 14:18:10

问题


How can I add a clear button (cross inside a circle) for UITextView like UITextField has?


回答1:


just make a uibutton and put it on uitextview and set its action for clear text view;

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=@"";
}

hope you want to clear the text view text when you click on cross button above is help if not understand then i can send you proper program for that




回答2:


Based on the answer from GhostRider a more accurate and up to date implementation:

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];

And the method

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

You can use this images for the two states of the button:




回答3:


From product perspective, if you're going to have a clear button, you probably want to use a UITextField instead of a UITextView and UITextField supports a clear button natively - set the clearButtonMode property as such:

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

See screenshot:

You could use UITextFieldViewModeWhileEditing to only present the clear button while the user is actively updating the content.




回答4:


There's nothing built in like there is for the UITextField. You'd have to add the view yourself (probably a UIButton) and place it correctly and also somehow get the text to wrap around it correctly. (And I don't think the latter is really possible.)

Maybe instead you should display a toolbar above the keyboard (or an inputAccessoryView if you're targeting 3.2 and later) that provides a clear button.




回答5:


For me changing the .frame or the .contentInset properties did not work.

For me the best result came from:

1) adding a UIView to the controller, give it round corners and a border to mimic a 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) place UITextView on top of this UIView. Place it so that the borders of the underlying UIView stay visible.

3) give the UITextView round corners:

self.textNote.layer.cornerRadius = 9.0f;

3) Make its width fe. 30pixels less compared to the underlying UIView. You now have space for a clear-button.

4) simply add a UIButton to your controller and place it in the top-right corner of the underlying UIView.

5) change the buttons properties: set its type to 'custom' and set its image to the image of a grey cross.

6) bind an action to the button te clear the UITextView




回答6:


You can add a clear button like the one in the attached screenshot with minimal coding. Just follow these steps:

  • Select the storyboard and drag a UIButton into your UITextView
  • Set the buttons constraints
  • Assign a title or a background image
  • Create the button's IBOutlet reference and the action (see onClearPressed(_:) below) for "Touch Up Inside" in the ViewController
  • Implement the textViewDidChange(_:) UITextViewDelegate delegate method, and make sure to set the button's isEnabled property based on the textfield content, e.g.:

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

  • Implement the onClearPressed(_:) action:

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

That's it.



来源:https://stackoverflow.com/questions/3877980/clear-button-on-uitextview

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!