简体   繁体   中英

Clear button on UITextView

如何为UITextView添加一个清晰的按钮(在圆圈内交叉),如UITextField?

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:

UITextFieldButtonUITextFieldButtonPressed

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

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.

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.

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

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, eg:

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.

UTextView中的清除按钮

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM