来自this帖子,他们说这是ios 7和8中的一个错误 - ColumnOne | ColumnTwo | columnThree | ColumnFour
1 1 1 2015-05-08 15:28:22.630
2 2 2 2015-05-07 15:28:22.630
................
................
中的按钮在点按时不会更改为突出显示。在这里,我在Objective-C中发布了一个答案:
创建自定义UITableViewCell
子类和自定义UITableView
子类。
使用此示例UITableViewCell
的initWithFrame:
UITableView
使用此示例- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self)
{
// iterate over all the UITableView's subviews
for (id view in self.subviews)
{
// looking for a UITableViewWrapperView
if ([NSStringFromClass([view class]) isEqualToString:@"UITableViewWrapperView"])
{
// this test is necessary for safety and because a "UITableViewWrapperView" is NOT a UIScrollView in iOS7
if([view isKindOfClass:[UIScrollView class]])
{
// turn OFF delaysContentTouches in the hidden subview
UIScrollView *scroll = (UIScrollView *) view;
scroll.delaysContentTouches = NO;
}
break;
}
}
}
return self;
}
' s UITableViewCell
initWithStyle:reuseIdentifier:
但是我不能用Swift写。有一些问题:
1)我做不到
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self)
{
// iterate over all the UITableViewCell's subviews
for (id view in self.subviews)
{
// looking for a UITableViewCellScrollView
if ([NSStringFromClass([view class]) isEqualToString:@"UITableViewCellScrollView"])
{
// this test is here for safety only, also there is no UITableViewCellScrollView in iOS8
if([view isKindOfClass:[UIScrollView class]])
{
// turn OFF delaysContentTouches in the hidden subview
UIScrollView *scroll = (UIScrollView *) view;
scroll.delaysContentTouches = NO;
}
break;
}
}
}
return self;
}
错误:无法分配给' self'在一个方法
2)在Swift中,我无法做到
self = super.init(style: style, reuseIdentifier: reuseIdentifier)
与目标C一样:
view.class
我已经搜索了几个小时但仍然无法得到我想要的东西。
请有人在Swift中回答这个问题吗?
答案 0 :(得分:1)
在Swift中,要调用超类的指定初始值,而不是调用self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]
,只需使用super.init(style: style, reuseIdentifier: reuseIdentifier)
答案 1 :(得分:1)
感谢Schemetrical,这是我的工作版本。 (iOS 7 + 8)
首先我写了一个实用函数:
class func classNameAsString(obj: AnyObject) -> String {
return _stdlib_getDemangledTypeName(obj).componentsSeparatedByString(".").last!
}
然后我继承UITableView并实现它:
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
for view in self.subviews {
if (Utility.classNameAsString(view) == "UITableViewWrapperView") {
if view.isKindOfClass(UIScrollView) {
var scroll = (view as UIScrollView)
scroll.delaysContentTouches = false
}
break
}
}
}
我也是UITableViewCell的子类并实现它:
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
for view in self.subviews {
if (Utility.classNameAsString(view) == "UITableViewCellScrollView") {
if view.isKindOfClass(UIScrollView) {
var scroll = (view as UIScrollView)
scroll.delaysContentTouches = false
}
}
}
}