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; }
使用此示例UITableViewCell
的initWithStyle: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 } } } }