假设我要创建一个按钮列表。我有一个按钮B,当单击该按钮时,将以这种方式创建按钮A的列表。

swift - 如何在Xcode,Swift中使用按钮创建相同的对象-LMLPHP

然后,当单击每个按钮A时,它都会删除自己。

我怎样才能做到这一点?
谢谢

最佳答案

为此,您需要做一些事情:


在您的IBOutlet中自动出现的NSViewNSWindow。我称我为mainView。 (注意:我是在Mac上使用Cocoa进行的,因此是NSWindow,尽管我认为此过程在iOS / Cocoa Touch上非常相似)
两幅图像,分别是A按钮和B按钮之一,分别称为“ A”和“ B”。


如果A按钮要被复制很多次,我们将需要一个A按钮类。 A按钮类具有一个初始化程序,该初始化程序以编程方式将其转换为“图像按钮”。在其表面上具有图像而不是文本的按钮。同样,AButton类实现touchesBegan:,该函数侦听按钮的单击。单击后,按钮将调用该功能。然后,该按钮会将其自身从所处的任何视图中移除。

class AButton: NSButton {
    override init(frame frameRect: NSRect) {
        super.init(frame: frameRect)

        self.bezelStyle = .regularSquare
        self.setButtonType(.momentaryPushIn)
        self.isBordered = false
        self.image = NSImage(named: "A") // puts image on the face of the button
    }

    override func touchesBegan(with event: NSEvent) { // "when button is clicked..."
        self.removeFromSuperview() // remove from view
    }
}


接下来,我们需要单击B按钮时要执行的功能。使用界面生成器(IB)将“图像按钮”拖到主窗口上。在工具栏中,将该按钮的图像选择为“ B”。然后,将IBAction从B按钮拖到您的AppDelegate(或控制器文件/类,无论可能是什么)。此函数运行一个循环,该循环创建许多AButton实例,正确定位它们,然后使用NSView将它们添加到addSubview()中。只要按下其中之一,它就会从视图中删除。

@IBOutlet weak var mainView: NSView! // outlet to NSView in main window

@IBAction func bButtonPressed(_ sender: Any) {
        for i in 0...3 {
            let x = 50 + i*110
            let y = 50

            let theButton = AButton(frame: NSMakeRect(CGFloat(x), CGFloat(y), 100, 100))
            mainView.addSubview(theButton) // adds newly created AButton to the view
        }
}

关于swift - 如何在Xcode,Swift中使用按钮创建相同的对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40563189/

10-12 13:03