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

时间:2015-05-11 11:40:31

标签: ios swift uibutton highlight

来自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中回答这个问题吗?

2 个答案:

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

        }
    }
}