iOS. Приемы программирования. Вандад Нахавандипур

Чтение книги онлайн.

Читать онлайн книгу iOS. Приемы программирования - Вандад Нахавандипур страница 23

iOS. Приемы программирования - Вандад Нахавандипур Бестселлеры O’Reilly (Питер)

Скачать книгу

данном примере необходимо отметить, что вид выбора выравнивается по центру того вида, в котором находится. Если мы запустим это приложение в эмуляторе iOS 7, то увидим пустой экран. Дело в том, что в iOS 7 сам элемент для выбора белый и мы видим фон контроллера вида.

      Вид выбора отображается в виде сплошного белого поля потому, что мы еще не наполнили его какими-либо значениями. Сделаем это. Итак, нам потребуется указать источник данных для вида выбора, а потом убедиться в том, что контроллер вида соответствует протоколу, требуемому источником данных. Источник данных экземпляра UIPickerView должен подчиняться протоколу UIPickerViewDataSource, так что обеспечим соответствие данного вида условиям этого протокола в файле. m:

      @interface ViewController () <UIPickerViewDataSource, UIPickerViewDelegate>

      @property (nonatomic, strong) UIPickerView *myPicker;

      @end

      @implementation ViewController

      

      Хорошо. Теперь изменим наш код в файле реализации, чтобы гарантировать, что актуальный контроллер вида выбран в качестве источника данных для вида выбора:

      – (void)viewDidLoad{

      [super viewDidLoad];

      self.myPicker = [[UIPickerView alloc] init];

      self.myPicker.dataSource = self;

      self.myPicker.center = self.view.center;

      [self.view addSubview: self.myPicker];

      }

      После этого, попытавшись скомпилировать приложение, вы увидите, что компилятор начинает выдавать предупреждения. Эти предупреждения сообщают, что вы еще не реализовали некоторые методы, внедрения которых требует протокол UIPickerViewDataSource. Чтобы исправить эту ситуацию, нужно нажать Command+Shift+O, ввести UIPickerViewDataSource и нажать Enter. Так вы попадете к тому месту в вашем коде, где определяется данный протокол, и увидите нечто подобное:

      @protocol UIPickerViewDataSource<NSObject>

      @required

      // Возвращает количество столбцов для отображения

      – (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView;

      // Возвращает количество строк в каждом компоненте

      – (NSInteger)pickerView:(UIPickerView *)pickerView

      numberOfRowsInComponent:(NSInteger)component;

      @end

      Вы заметили здесь ключевое слово @required? Оно означает, что любой класс, желающий стать источником данных для вида выбора, обязан реализовывать эти методы. Напишем их в файле реализации контроллера нашего вида:

      – (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{

      if ([pickerView isEqual: self.myPicker]){

      return 1;

      }

      return 0;

      }

      – (NSInteger) pickerView:(UIPickerView *)pickerView

      numberOfRowsInComponent:(NSInteger)component{

      if ([pickerView isEqual: self.myPicker]){

      return 10;

      }

      return 0;

      }

      Итак, что здесь происходит? Рассмотрим, какие данные предполагает каждый из методов источника:

       numberOfComponentsInPickerView: – этот метод передает объект вида выбора в качестве параметра, а в качестве возвращаемого значения ожидает целое число, указывающее, сколько компонентов вы хотели бы отобразить в этом виде выбора;

      • pickerView: numberOfRowsInComponent: – для каждого компонента, добавляемого в вид выбора, необходимо указать системе, какое количество строк вы хотите отобразить в данном компоненте.

Скачать книгу