2015-12-22 5 views
0

Я хочу сбросить текстовые поля myview до пустого при нажатии кнопки деструктивной панели действий. Кнопка «Готово» вызывает таблицу действий. Это мой actionsheet:Как выполнить сброс текстового поля, используя таблицу действий?

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

И используется этот метод, чтобы сбросить:

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

Но ничего не происходит.

enter image description here

enter image description here

+0

заменить 'делегата: sender' на' делегата: self', поэтому делегаты не получают вызов, как только вы закончите просто установить все textFiled для '.text = @ "" '. я надеюсь, что он сработает – Buntylm

ответ

4

Заменить delegate:sender на delegate:self, поэтому делегаты

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

не получают вызов также обновит функции делегата, как только вы сделали просто установить все textFiled в .text= @"" , я надеюсь, что это сработает

Также опубликовано как комментарий ранее.

+1

Сделал это и сработал, спасибо :) – Harshil

+0

Прохладный код! – Buntylm

+0

@hereAll Вниз избиратели приветствуют вас, но это будет хорошо, если вы также дадите некоторые комментарии к обзору. – Buntylm

1

Много вопросов:

Измените эту строку:

if (buttonIndex == 0) 

к:

if (buttonIndex == sheet.destructiveButtonIndex) 

Вам также необходимо передать self в качестве делегата вместо sender.

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

И имя метода делегата имеет значение. Вам необходимо:

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

См. Документы для UIActionSheet. Существуют специальные свойства для получения различных индексов кнопок. Используйте те, которые превышают индексы индекса hardcoding.

Также обратите внимание, что UIAlertView устарел. Вы должны использовать UIAlertController, если не требуется поддержка IOS 7.

+0

Сделал это и сработал, спасибо :) – Harshil

+0

if (buttonIndex == sheet.destructiveButtonIndex) дал ошибку «лист не объявлен», хотя и объявил об этом, не знаю почему – Harshil

+0

Возможно, вы переименовали параметр в ' actionSheet' с вашего оригинального 'листа'. – rmaddy

1

метод делегата используется в worng

Пожалуйста, сделайте ваш делегат себя

delegate:self 

и использовать этот метод

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

} 
+0

Сделал это и сработал, спасибо :) – Harshil

1

Вы должны установить себя в качестве делегата , и я думаю, что новый UIAlertController больше удобен в использовании, без любой делегат:

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] 
-1
#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) 
    { 
     [email protected]""; 
    } 
} 
@end 
+0

1) Не отправляйте ответы только на код. Объясните, что было не так, и как ваш ответ решает проблему. 2) В чем смысл вашего ответа? Как это улучшается с другими 4 ответами, опубликованными задолго до вашего? 3) Зачем добавлять в свой ответ все другие ненужные коды? – rmaddy