UIButton не показывает подсветку при нажатии в iOS7 - Swift

Из этого поста они сказали, что это своего рода ошибка в IOS 7 и 8 - кнопка в UITableViewCell не меняется на выделенный при нажатии. Здесь я публикую один ответ для этого в Objective-C:

Создать кастом UITableView подкласс и обычай UITableViewCell подкласс.

Используйте этот образец UITableViewinitWithFrame:

- (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"s 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) 

Ошибка: невозможно присвоить "себе" в методе

2) В Swift я не могу сделать

view.class

как в Задаче C:

[view class]

Я искал несколько часов, но все еще не могу получить то, что хочу.

Пожалуйста, кто-нибудь может ответить на это в Swift?

2 ответа

Решение

Благодаря 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
            }

        }
    }
}

В Swift вызывать инициализатор суперкласса вместо вызова self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]Вы просто используете super.init(style: style, reuseIdentifier: reuseIdentifier)

Другие вопросы по тегам