2014-10-07 2 views
0

Я пытаюсь реализовать подобный код для этого в Swift проектаOverride layout.subviews управление делецией в Swift

https://gist.github.com/joaofranca/3159618

У меня возник трудность получение класса для подвида в секциях NSStringFromClass.

Я пробовал NSStringFromClass (subview.class), но Swift ему не нравится.

Вы знаете, как использовать это в Swift?

Спасибо,

Энди

ответ

2

Update:

Вы можете вызвать classForCoder на классы, производные от NSObject:

var s: NSObject = "hello" 
var i: NSObject = 3 
NSStringFromClass(s.classForCoder) // "NSString" 
NSStringFromClass(i.classForCoder) // "NSNumber" 

Оригинальный ответ:

В Swift, вместо того, чтобы идентифицировать класс по имени, используйте is:

Objective-C:

for (UIView *subview in self.subviews) { 

    if([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellDeleteConfirmationControl"]) { 

     // do magic here 
     ... 

    }else if ([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellEditControl"]) { 

     // do magic here 
     ... 

    }else if ([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellReorderControl"]) { 

     // do magic here 

Swift:

for subview in self.subviews as [UIView] { 

    if subview is UITableViewCellDeleteConfirmationControl { 

     // do magic here 
     ... 

    } else if subview is UITableViewCellEditControl { 

     // do magic here 
     ... 

    } else if subview is UITableViewCellReorderControl { 

     // do magic here 
+0

Большое спасибо за это! Действительно оцените это –

+0

нет определения для UITableViewCellEditControl, что включить, чтобы добавить его – famer

+0

нет UITableViewCellDeleteConfirmationControl в swift. Он показывает неразрешенный идентификатор. Как заставить его работать? – Swayambhu

1

Swift 2.0 -> переопределять layoutSubviews()

class MyCustomCell: UITableViewCell { 

override func aSubView() { 
    super.layoutSubviews() 
    for aSubView in self.subviews { 
     if String(aSubView.classForCoder).rangeOfString("UITableViewCellDeleteConfirmationView") != nil { 
      // Do whatever you want to do with default Delete Button. 
      // aSubView is the Delete Button. 
      aSubView.frame = CGRectMake(aSubView.frame.origin.x, aSubView.frame.origin.y, aSubView.frame.size.width, aSubView.frame.size.height - 10) 
     } 
    } 
} 
} 
+0

Пожалуйста, не отправляйте один и тот же ответ несколько раз. Если вопрос является дубликатом, отметьте его как дубликат; в противном случае, адаптируйте свой ответ на вопрос. Спасибо. – Moritz

0

быстрые 3,0 -> с использованием ограничений.

override func layoutSubviews() { 
    super.layoutSubviews() 
    for aSubView in self.subviews as [UIView] { 
     if String(describing: aSubView.classForCoder).range(of: "UITableViewCellDeleteConfirmationView") != nil { 
      aSubView.translatesAutoresizingMaskIntoConstraints = false 
      NSLayoutConstraint.activate([ 
       aSubView.widthAnchor.constraint(equalToConstant: 50), 
       aSubView.heightAnchor.constraint(equalToConstant: 50), 
      ]) 
     } 
    } 
} 
Смежные вопросы