我想填充UICollectionView的单元格。 我创建了一个自定义单元格,该单元格由Label和TextFiled组成,它们的inputView我已以编程方式更改为UIPickerView,因此其行为类似于pickerview,我的问题是我具有自定义单元格.h和.m文件,并且我有一个Controller类,collectionview是可以正常工作,但是我无法将数据添加到UIPickerview中,因为它位于单独的.h文件中,因此它是pickerview委托,数据源方法将位于.m文件中。
但是我的数据在主要的VC类中,如何从VC填充pickerview?
我对目标c还是陌生的,如果不能清楚地说明我的问题,对不起
我已经尝试在VC类中获取单元格,并在VC类中填充单元格的pickerview,但这无法正常工作,因为我无法访问(__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;
}
答案 0 :(得分:1)
您需要在Controller中创建一个属性,即以DataType作为自定义单元格类类型的selectedCell。
在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];
}
现在,您可以在UIPIckerView数据源,委托方法中使用selectedCell
//selectedCell.ssrTextField.text = listOfOutboundSSR[key];