Ios UIDatePicker不';如果包含在UITableViewCell中,则无法工作
我有一个应用程序,我经常在表视图中使用Ios UIDatePicker不';如果包含在UITableViewCell中,则无法工作,ios,objective-c,uitableview,uidatepicker,Ios,Objective C,Uitableview,Uidatepicker,我有一个应用程序,我经常在表视图中使用UIDatePicker。因此,我制作了定制的DatePickerTableViewCellclass,它过去是可以工作的(几年前,我不知道确切的日期)。现在,我正在iOS 14上再次测试一切,日期选择器不会对我想要滚动轮子的手势做出反应。相反,表视图似乎窃取了滚动手势。即使我没有将首选样式设置为“Wheels”,我也无法与日期选择器交互 要复制它,您需要一个具有足够单元格的表视图控制器,以使其可滚动(哪些单元格无关紧要): 当然还有DatePickerTa
UIDatePicker
。因此,我制作了定制的DatePickerTableViewCell
class,它过去是可以工作的(几年前,我不知道确切的日期)。现在,我正在iOS 14上再次测试一切,日期选择器不会对我想要滚动轮子的手势做出反应。相反,表视图似乎窃取了滚动手势。即使我没有将首选样式设置为“Wheels”,我也无法与日期选择器交互
要复制它,您需要一个具有足够单元格的表视图控制器,以使其可滚动(哪些单元格无关紧要):
当然还有DatePickerTableViewCell
类本身:
@interface DatePickerTableViewCell () {
UIDatePicker *datePicker;
}
@end
@implementation DatePickerTableViewCell
- (id)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
datePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake((frame.size.width - 320) / 2, 0, 320, 216)];
datePicker.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleBottomMargin
| UIViewAutoresizingFlexibleRightMargin;
datePicker.datePickerMode = UIDatePickerModeDate;
if (@available(iOS 13.4, *)) {
datePicker.preferredDatePickerStyle = UIDatePickerStyleWheels;
}
[self addSubview:datePicker];
}
return self;
}
@end
日期选择器显示,但我无法与之交互:
您将UIDatePicker添加为UITableViewCell子类的子视图,而不是UITableViewCellContentView的子视图,因此它是内容视图的同级视图而不是子视图。我的猜测是内容视图正在吸收这些内容,或者内容视图没有被正确实例化,因为它从未被使用过 当前单元格的结构:
DatePickerTableViewCell
-- DatePicker
-- UITableViewCellContentView
切换此线路:
[self addSubview:datePicker];
为此:
[self.contentView addSubview:datePicker];
在DatePickerTableViewCell的-(id)initWithFrame:(CGRect)框架内
应允许日期选择器正确滚动,结构如下:
DatePickerTableViewCell
-- UITableViewCellContentView
---- DatePicker
谢谢,真是太棒了!我想知道它为什么(什么时候)坏了;我似乎在2014年创建了它,所以这是很多iOS版本之前的事了……很高兴这对你有用。我想它可能在iOS 9的某个地方发生了变化。我在讨论论坛上找到了这篇文章,它从iOS 9开始引用了类似的内容:
DatePickerTableViewCell
-- UITableViewCellContentView
---- DatePicker