感谢您的阅读,
我在 UICollectionViewCell
中有两个 UITextFields
(以及一些标签)。我可以在模拟器中选择两个文本字段,适用于 iPhone 6、6+、5、5s、4s,所有 iOS8。
当我连接我的 iPhone,一个 iPhone 5c iOS7(非 sim)时,我只能选择顶部 UITextField
的左上部分。答案将建议如何选择两个文本字段,并探索其他可能的原因某人将无法选择文本字段,以及可能的调试方法。对于那些想知道的人,一旦我让这个应用程序在 ios7 中 100% 运行,我就会升级到 ios8。
我尝试过的解决方案:
UICollectionView
to be Editable -- 它只适用于 UITableViews
ViewController
and starting again. UICollectionView
单元格具有“User Interaction Enabled”我的当前设置
UICollectionView: data-source & delegate = 它的 super View (UIViewController)
UICollectionViewCell
:有 4 个导出链接到自定义单元格UITextFields
elegate 设置为 UIViewController
EditingDidBegin
和 EditingDidEnd
方法在 UIViewController
要明确:
UITextFields
相关代码 - UIViewController .m
接口(interface) - Private.m
@interface EnterFinalHRViewController ()
// The current responder showing a keyboard.
@property (nonatomic, assign) id currentResponder;
文本字段方法
- (IBAction)editingDidBeginUITextField *)textField {
self.currentResponder = textField;
}
- (IBAction)resignOnTapid)sender {
//called from a single tap on the view, gesture recognizer is present
//called when the text field says "Editing did End"
[self.currentResponder resignFirstResponder];
}
//implementation of the cell
-(UICollectionViewCell *)collectionViewUICollectionView *)collectionView
cellForItemAtIndexPathNSIndexPath *)indexPath{
static NSString *cellIdentifier = @"swimmerReview";
FinalHeartRateCollectionViewCell *cell = (FinalHeartRateCollectionViewCell *)[collectionView dequeueReusableCellWithReuseIdentifier:cellIdentifier forIndexPath:indexPath]; //reuse the cell
Lane *lane = [_lanes objectAtIndex:indexPath.section]; //lanes hold swimmers, so get the lane
Swimmer *swimmer = [lane.swimmers objectAtIndex:indexPath.row]; //swimmers are in the lane, so get the right swimmer
if (swimmer.actualSwimmerName) {
cell.swimmerFullName.text = swimmer.actualSwimmerName;
} else {
cell.swimmerFullName.text = @"Assign Swimmer";
}
cell.finalHeartRate.text = @"--";
//Person Picker is a PickerView that lets the user select a swimmer
cell.swimmerFullName.inputView = PersonPicker;
cell.averageStrokeRate.text = [NSString stringWithFormat"Avg SR: %.f", swimmer.strokeRateAvg];
cell.AveragePace.text = [@"Avg Pace: " stringByAppendingString: swimmer.setSplitAvg];
return cell;
}
问题
答案将建议如何选择两个文本字段,并探讨其他可能的原因有人无法选择文本字段,以及可能的调试方法。
快速向 SO 的所有贡献者大喊,你们都是这样的资源,我从你们回答的所有问题中阅读并学到了很多东西。这次我实在想不通。
@Ian MacDonald,您提供了一个调试方法,导致了这个发现的瑰宝 Content View Not Resizing .
我的问题是运行 ios7 与 ios8 之一。在我的自定义单元格中简单地覆盖布局 subview 方法解决了这个问题。向@Daniel Plamann 大声疾呼,您可以在上面的页面上为他的解决方案投票。
//放在你的 UICollectionViewCell 自定义类中
- (void)layoutSubviews
{
[super layoutSubviews];
BOOL contentViewIsAutoresized = CGSizeEqualToSize(self.frame.size, self.contentView.frame.size);
if( !contentViewIsAutoresized) {
CGRect contentViewFrame = self.contentView.frame;
contentViewFrame.size = self.frame.size;
self.contentView.frame = contentViewFrame;
}
}
我的测试项目之所以成功,是因为我是在两天前完成的,而我的主要项目是在 ios8 发布之前的 6 个月前完成的。所以如果你发现你做的一切都正确,按照上面的 10 个步骤,你仍然无法选择你的 subview ,这里还有一个。
关于ios - UICollectionViewCell 内的 UITextField 无法访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26653760/
欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) | Powered by Discuz! X3.4 |