Подтвердить что ты не робот

Получить выбранную строку в UIPickerView для каждого компонента

У меня есть UIPickerView с 3 компонентами, заполненными 2 NSMutableArrays (2 компонента имеют один и тот же массив).

В учебнике говорится:

//PickerViewController.m
- (void)pickerView:(UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {

NSLog(@"Selected Color: %@. Index of selected color: %i", [arrayColors objectAtIndex:row], row);
}

Но я хочу показать выбранную строку для каждого компонента в UIAlertView после того, как пользователь коснулся UIButton.

Есть ли способ сделать это? Или я должен просто использовать 3 невидимых UILabels в качестве буфера?

Спасибо заранее.

4b9b3361

Ответ 1

Итак, в методе действия кнопки вы можете сделать что-то вроде этого:

- (IBAction) showAlert {
  NSUInteger numComponents = [[myPickerView datasource] numberOfComponentsInPickerView:myPickerView];

  NSMutableString * text = [NSMutableString string];
  for(NSUInteger i = 0; i < numComponents; ++i) {
    NSUInteger selectedRow = [myPickerView selectedRowInComponent:i];
    NSString * title = [[myPickerView delegate] pickerView:myPickerView titleForRow:selectedRow forComponent:i];
    [text appendFormat:@"Selected item \"%@\" in component %lu\n", title, i];
  }

  NSLog(@"%@", text);
}

Это будет абсолютный формальный способ получения информации (с использованием правильных методов источника данных и делегата), но может быть проще (в зависимости от вашей настройки), просто захватить выбранную строку, а затем вытащить информацию из вашей модели напрямую, а не через метод делегата.

Ответ 2

Версия Swift 3:

    var value = ""
for i in 0..<numberOfComponents {
                        let selectedRow = pickerView.selectedRow(inComponent: i)
                        if let s = pickerView.delegate?.pickerView!(pickerView, titleForRow: selectedRow, forComponent: i) {
                            value += s
                        }
                    }