Как заполнить UIPickerView пользовательской ячейки - PullRequest
0 голосов
/ 09 апреля 2019

Я хотел заполнить ячейки UICollectionView.Я создал пользовательскую ячейку, которая состоит из Label и TextFiled, чье inputView я изменил программно на UIPickerView, так что он будет вести себя как pickerview, мой вопрос: у меня есть пользовательские ячейки .h и .m файл, и у меня есть один класс Controller, collectionview этоработает нормально, но я не могу добавить данные в UIPickerview, так как они находятся в отдельном файле .h, поэтому его методы делегирования и источники данных будут в его файле .m.

Но мои данные находятся в основном классе VC. Как это сделать?Я заполняю представление выбора из VC?

Я новичок в задаче c, и извините, если не объяснил свою проблему ясно

Я уже пытался получить ячейку в своем классе VC и заполнить представление выбора ячейки в VCкласс, но это не будет работать, потому что я не могу получить доступ к полям ячейки за пределами - (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{} метод.

  - (NSInteger)numberOfComponentsInPickerView:(nonnull UIPickerView *)pickerView {
    return 1;
}


    - (NSInteger)pickerView:(nonnull UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
    if(pickerView.tag==0){
        return outboundBaggages.count;
    }
    return 0;
}


    - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
    if(pickerView.tag==0){
        NSString *key = [NSString stringWithFormat:@"%ld",(long)row];
        ssrDescription = listOfOutboundSSR[key];
        //cell.ssrTextField.text = listOfOutboundSSR[key];
       //above line should be the right but it is field of cell and i 
       //can not access it outside of collectionview's method 
    }
}


    - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
    if(pickerView.tag==0){
         NSString *key = [NSString stringWithFormat:@"%ld",(long)row];
        return listOfOutboundSSR[key];
    }
    return nil;
}

1 Ответ

1 голос
/ 09 апреля 2019

Вам потребуется создать свойство в Контроллере, т.е. selectedCell с DataType в качестве пользовательского типа класса ячейки.

В приведенном ниже источнике данных UICollectionView соответствует UITextfieldDelegate

(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {

///....
cell.textfield.delegate = self; 
}

Сейчасреализовать метод делегата текстового поля и присвоить значение selectedCell

- (void)textFieldDidBeginEditing:(UITextField *)textField {

   CGPoint tfPosition = [textField convertPoint:CGPointZero toView:self.collectionView];
   NSIndexPath *indexPath = [self.collectionView indexPathForItemAtPoint:tfPosition];
   selectedCell = [self.collectionView cellForItemAtIndexPath: indexPath];
}

Теперь вы можете использовать selectedCell в источнике данных UIPIckerView, методы делегата //selectedCell.ssrTextField.text = listOfOutboundSSR[key];

...