InputView 在 UICollectionView 内的 TextFields 中不起作用
Posted
技术标签:
【中文标题】InputView 在 UICollectionView 内的 TextFields 中不起作用【英文标题】:InputView not working in TextFields inside UICollectionView 【发布时间】:2017-07-19 06:44:02 【问题描述】:在每个CollectionViewCells
中,我添加了UITextField
,需要从选择器视图中获取输入。
所以我在CellForRowAtIndexPath
中将 inputView 分配为 pickerView。
当我运行代码时,输入视图部分为空。没有任何pickerviews。
我意识到数据源方法没有被调用。
percentagePicker
在我的 ViewController 上创建了 outlet
这是我的 cellForRowAtIndexPath 方法
cell.cropPercent.text = [NSString stringWithFormat:@"%@",cropPercentagesList[indexPath.row];
UIPickerView *pikerView = _percentagePicker;
[_percentagePicker removeFromSuperview];
pikerView.delegate =self;
pikerView.dataSource = self;
cell.cropPercent.textColor = [UIColor redColor];
cell.cropPercent.inputView = pikerView;
【问题讨论】:
为什么要从 superView 中删除 percentPicker? 如帖子***.com/a/25882277/5215474中建议的那样 【参考方案1】:与其创建 UIPickerView 的 outlet 并将其分配给 pickerView 以显示为 inputView,不如试试下面的代码。
UIPickerView *pikerView = [[UIPickerView alloc]init];
pikerView.delegate =self;
pikerView.dataSource = self;
cell.cropPercent.textColor = [UIColor redColor];
cell.cropPercent.inputView = pikerView;
【讨论】:
如果全部不同,我如何获取pickerviews中的值 你可以为这些pickerViews指定标签pickerView.tag = indexPath.row 'NSInvalidArgumentException',原因:'*** -[__NSPlaceholderArray initWithObjects:count:]:尝试从对象 [2] 中插入 nil 对象' 当我在 didselect 之前更改选择器中的项目时出现此错误委托被调用 对不起,我没有得到你。你能解释一下导致这个错误的场景吗? 当我在pickerView中更改选择时【参考方案2】:您应该将您的 pickerView 代码移动到 viewDidLoad
,因为它在您的 viewController
中。不要创建新的UIPickerView
的实例;
- (void) viewDidLoad
[super viewDidLoad];
_percentagePicker.delegate =self;
_percentagePicker.dataSource = self;
在您的cellForRow
中执行此操作并删除其他UIPickerView
代码:
cell.cropPercent.inputView = pikerView;
yourPickerDataSourceArray = yourSource[indexPath.row];
[percentagePicker reloadAllComponents];
【讨论】:
以上是关于InputView 在 UICollectionView 内的 TextFields 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
InputView 在 UICollectionView 内的 TextFields 中不起作用
UIPickerView 作为 inputView 不隐藏在 iPad 上