UIButton在iOS7中没有显示突出显示 – Swift

从这篇文章中他们说它是ios 7和8中的一个错误 – UITableViewCell中的按钮在点击时不会更改为突出显示。 在这里,我在Objective-C中发布了一个答案:

创建自定义UITableView子类和自定义UITableViewCell子类。

使用此示例UITableView的initWithFrame:

 - (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; } 

使用此示例UITableViewCellinitWithStyle:reuseIdentifier:

 - (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; } 

但是我不能用Swift写。 有一些问题:

1)我做不到

 self = super.init(style: style, reuseIdentifier: reuseIdentifier) 

错误:无法在方法中分配给“self”

2)在斯威夫特,我做不到

 view.class 

如目标C:

 [view class] 

我搜索了几个小时但仍然无法得到我想要的东西。

请有人能在Swift中回答这个问题吗?

在Swift中,要调用超类的指定初始化,而不是调用self = [super initWithStyle:style reuseIdentifier:reuseIdentifier] ,你只需使用super.init(style: style, reuseIdentifier: reuseIdentifier)

感谢Schemetrical,这是我的工作版本。 (iOS 7 + 8)

首先我写了一个实用函数:

 class func classNameAsString(obj: AnyObject) -> String { return _stdlib_getDemangledTypeName(obj).componentsSeparatedByString(".").last! } 

然后我inheritanceUITableView并实现这个:

 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 } } } }