在Swift中覆盖layout.subviews删除控件
我想在Swift项目中实现类似的代码
https://gist.github.com/joaofranca/3159618
我很难得到在NSStringFromClass部分子视图的类。
我曾尝试过NSStringFromClass(subview.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), ]) } } }