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