ios - 在子类中更改 subview 类

标签 ios swift subclassing

假设我有一个名为自定义 View 的 UITableViewCell 类,它带有一个类 GenericButton 的按钮,它已在自动布局中以编程方式定义

class View: UITableViewCell {
    var button: GenericButton

    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
        button = GenericButton()
        // blah blah blah constraints
    }
}

现在假设我有一个名为 OtherView 的 View 子类,我希望该按钮成为名为 CircleButton 的 GenericButton 的一个子类。

class OtherView: View {
    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
        button = CircleButton()
    }
}

但是,我的 View 仍然显示一个 GenericButton,而不是 CircleButton。我做错了什么?

最佳答案

好的,我已经考虑了几个小时,得出的结论是这可能是最好的答案。

import UIKit

class View: UITableViewCell
{
    var button: GenericButton! = nil

    required init(coder aDecoder: NSCoder)
    {
        super.init(coder: aDecoder)
    }

    override init(style: UITableViewCellStyle, reuseIdentifier: String?)
    {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
    }

    convenience init(button: Bool, style: UITableViewCellStyle, reuseIdentifier: String?)
    {
        self.init(style: style, reuseIdentifier: reuseIdentifier)

        if button
        {
            button = GenericButton()
            setConstraint()
        }
    }

    private func setConstraint()
    {
        // blah blah blah constraints
    }
}

class OtherView: View
{
    required init(coder aDecoder: NSCoder)
    {
        super.init(coder: aDecoder)
    }

    override init(style: UITableViewCellStyle, reuseIdentifier: String?)
    {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
    }

    convenience init(button: Bool, style: UITableViewCellStyle, reuseIdentifier: String?)
    {
        self.init(style: buttonWithStyle, reuseIdentifier: reuseIdentifier)

        if button
        {
            button = CircleButton()
            setConstraint()
        }
    }
}

关于ios - 在子类中更改 subview 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32600578/

相关文章:

ios - UIViewController viewDidLoad 与 viewWillAppear : What is the proper division of labor?

ios - 如何将帖子字符串写入API swift 3

iOS swift :Object mapper conditional mapping

java - 在 Java 中覆盖具有通用返回类型的方法

ios - 在 Swift 中子类化 PFObject

ios - 我的 iOS 应用程序卡住但没有出现错误

ios - 从 iPhone 应用程序启用/禁用 Apple 推送通知?

ios - 具有异步闭包变量的结构函数

ios - 在后台的 iPhone 7 上未调用应用程序 DidReceiveRemoteNotification

c# - Fluent NHibernate 中的自动映射子类