Как я могу отобразить определенное сообщение / оповещение после того, как пользователь выберет определенные значения из многокомпонентного средства выбора в xcode?

#objective-c #xcode #uipickerview

#objective-c #xcode #uipickerview

Вопрос:

Я пытаюсь отобразить сообщение, когда пользователь выбирает 2 значения из двойного component picker .

В случае, если пользователь выбрал «Высокая температура» и «Сильный кашель», используйте представление предупреждений для отображения сообщения, указывающего: «Вы должны сделать тест ПЦР».

В случае, если пользователь выбрал «Высокая температура» и «Средний кашель» или «Средняя температура» и «Сильный кашель», отобразите сообщение, указывающее: «это просто обычный грипп».

В случае всех других возможных вариантов выбора отобразите сообщение: «Расслабьтесь … Беспокоиться не о чем!»

Вот код ниже:

 #import "FirstViewController.h"
#define kFeverComponent 0
#define kCoughComponent 1

@interface FirstViewController ()
@property (strong, nonatomic) NSArray *feverTypes;
@property (strong, nonatomic) NSArray *coughTypes;
@property (weak, nonatomic) IBOutlet UIPickerView *dependentPicker;

@end

@implementation FirstViewController

- (void)viewDidLoad {
   [super viewDidLoad];
   self.feverTypes = @[@"High Fever", @"Medium Fever", @"No Fever"];
   self.coughTypes = @[@"Strong Cough", @"Medium Cough", @"No Cough"];
}
- (void)didReceiveMemoryWarning {
   [super didReceiveMemoryWarning];
}
- (IBAction)symptomsButtonPressed:(id)sender {
   NSInteger feverRow = [self.dependentPicker selectedRowInComponent: kFeverComponent];
   NSInteger coughRow = [self.dependentPicker selectedRowInComponent: kCoughComponent];
   NSString *fever = self.feverTypes[feverRow];
   NSString *cough = self.coughTypes[coughRow];
   NSString *message = [[NSString alloc] initWithFormat:
     @"You chose %@ and %@.", fever, cough];
   UIAlertController *alert =
     [UIAlertController
       alertControllerWithTitle:@"Thank you for choosing" message:message 
       preferredStyle:UIAlertControllerStyleAlert];
   UIAlertAction *action = [UIAlertAction actionWithTitle:@"Okay" 
     style:UIAlertActionStyleDefault handler:nil];
   [alert addAction:action];
   [self presentViewController:alert animated:YES completion:nil];
}
#pragma mark -
#pragma mark Picker Data Source Methods
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
   return 2;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent: 
   (NSInteger)component {
   if (component == kCoughComponent) {
     return [self.coughTypes count];
} else {
    return [self.coughTypes count];
}
}

#pragma mark Picker Delegate Methods
- (NSString *)pickerView:(UIPickerView *)pickerView
    titleForRow:(NSInteger)row
    forComponent:(NSInteger)component {
    if (component == kCoughComponent) {
      return self.coughTypes[row];
    } else {
      return self.feverTypes[row];
}
}

@end
  

Ответ №1:

Вам необходимо реализовать pickerview:didSelectRow:inComponent метод делегирования. Поэтому сделайте так, чтобы ваш класс придерживался UIPickerViewDelegate протокола, добавив его в определение интерфейса, например

 @interface FirstViewController () < UIPickerViewDelegate >
  

а затем реализовать, например

 - ( void ) pickerView:( UIPickerView * ) pickerView
         didSelectRow:( NSInteger      ) row
          inComponent:( NSInteger      ) component
{
    // logic here e.g.
    NSInteger fever = [pickerView selectedRowInComponent:kCoughComponent];
    NSInteger cough = [pickerView selectedRowInComponent:kFeverComponent];
    NSString * msg;

    if ( fever >= threshold amp;amp; cough >= threshold )
    {
       msg = @"Seek help";
    }
    else
    {
       msg = @"All fine";
    }

    // Show alert with msg
}