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

时间:2014-10-07 00:37:15

标签: ios swift

我正在尝试在Swift项目中实现类似的代码

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

我很难在NSStringFromClass部分获取子视图的类。

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

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

谢谢,

安迪

3 个答案:

答案 0 :(得分:2)

<强>更新

您可以在classForCoder

派生的类上调用NSObject
var s: NSObject = "hello"
var i: NSObject = 3
NSStringFromClass(s.classForCoder)    // "NSString"
NSStringFromClass(i.classForCoder)    // "NSNumber"

原始回答:

在Swift中,不是按名称标识类,而是使用is

<强>目标-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

答案 1 :(得分:1)

Swift 2.0 - &gt; 覆盖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)
        }
    }
} 
}

答案 2 :(得分:0)

swift 3.0 - &gt;使用约束。

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