在Swift中覆盖layout.subviews删除控件

我想在Swift项目中实现类似的代码

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

我很难得到在NSStringFromClass部分子视图的类。

我曾尝试过NSStringFromClass(s​​ubview.class),但Swift不喜欢它。

你知道如何在Swift中使用它吗?

谢谢,

安迪

更新

你可以从派生自NSObject类调用classForCoder

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

原始答案:

在Swift中,不是按名称来标识一个类,而是使用:

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 

迅速:

 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 

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

swift 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), ]) } } }