简体   繁体   中英

How to perform reset of textfield using actionsheet?

I want to reset the textfields of myview to empty when an actionsheet destructive button is pressed. Done button calls the actionsheet. This is my actionsheet:

- (IBAction)submit:(id)sender {
    UIActionSheet *sheet=[[UIActionSheet alloc]initWithTitle:@"Options" delegate:sender cancelButtonTitle:@"Cancel" destructiveButtonTitle:@"Reset" otherButtonTitles:@"Save", nil];
    [sheet showInView:self.view];
}

And is used this method to reset:

- (void)sheet:(UIActionSheet *)sheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if(buttonIndex==0)
    {
        self.textf1.text = @"";
    }
}

But Nothing is happening.

在此处输入图片说明

在此处输入图片说明

Replace delegate:sender to delegate:self that's why delegates

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex

are not getting call also update the delegate function, once you done just set all textFiled to .text= @"" . i hope it will work

Also posted as Comment earlier.

Lots of issues:

Change this line:

if (buttonIndex == 0)

to:

if (buttonIndex == sheet.destructiveButtonIndex)

You also need to pass self as the delegate instead of sender .

UIActionSheet *sheet= [[UIActionSheet alloc] initWithTitle:@"Options" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:@"Reset" otherButtonTitles:@"Save", nil];

And the name of the delegate method matters. You need:

- (void)actionSheet:(UIActionSheet *)sheet clickedButtonAtIndex:(NSInteger)buttonIndex

See the docs for UIActionSheet . There are specific properties to get various button indexes. Use those over hardcoding index numbers.

Also note that UIAlertView is deprecated. You should be using UIAlertController unless you need to support iOS 7.

delegate method you are using is worng

Please make your delegate to self

delegate:self

and Use this method

 - (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
      ////check index and empty all textfields

}

You should set self as the delegate, and I think the new UIAlertController is more convenience to use, without any delegate:

 UIAlertController *actionSheet = [UIAlertController alertControllerWithTitle:@"Action Sheet" message:nil preferredStyle:UIAlertControllerStyleActionSheet];
UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:nil];

 UIAlertAction *reset = [UIAlertAction actionWithTitle:@"Reset" style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action) {
     self.textf1.text = @"";
 }];

actionSheet.actions = @[reset, cancel];

[self presentViewController:actionSheet animated:YES completion:nil]
#import "ViewController.h"

@interface ViewController ()<UITextFieldDelegate,UIActionSheetDelegate>
{
    UIActionSheet *sheet;
}
@property (weak, nonatomic) IBOutlet UITextField *txtText;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];

}

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    [textField resignFirstResponder];
    return YES;
}

//Button click 

- (IBAction)OpenActionSheet:(id)sender
{
    sheet=[[UIActionSheet alloc]initWithTitle:@"ActionSheetDemo" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:@"Reset" otherButtonTitles:@"Save", nil];
    [sheet showInView:self.view];
}
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if (buttonIndex==0)
    {
        _txtText.text=@"";
    }
}
@end

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