【问题标题】:Swift class with uibutton.addTarget to UIView not working带有uibutton.addTarget到UIView的Swift类不起作用
【发布时间】:2018-07-17 08:52:40
【问题描述】:

我用以下类创建了一个新文件:

import Foundation
import UIKit

var Feld = classFeld()

class classFeld {

     let button = UIButton()

     func createButton() -> UIButton {
         button.frame = CGRect(x: 10, y: 50, width: 200, height: 100)
         button.backgroundColor=UIColor.black
         button.addTarget(self, action: #selector(ButtonPressed(sender:)), for: .touchUpInside)
        return button
    }

    @objc func ButtonPressed(sender: UIButton!) {
        button.backgroundColor=UIColor.red
    }
}

这是我的 ViewController:

import UIKit

class ViewController: UIViewController {

   override func viewDidLoad() {
        super.viewDidLoad()
        mainview.addSubview(Feld.createButton())
        self.view.addSubview(mainview)
    }

    var  mainview=UIView()
}

当我启动应用程序时,会创建一个黑色按钮,但当我点击它时,它不会变成红色。 如果我添加按钮而不是

mainview.addSubview(Feld.createButton())

self.view.addSubview(Feld.createButton())

它起作用了,按钮变成红色。

谁能解释一下为什么?如果我将某些内容添加到 self.view 或添加到然后添加到 self.view 的子视图中应该没有区别?

【问题讨论】:

  • 你如何设置主视图的框架?
  • 我根本没有设置。它适用于设置它。谢谢

标签: ios swift uiview uibutton addtarget


【解决方案1】:

因为你需要给它一个框架并添加到self.view

var mainview = UIView()

【讨论】:

  • 添加框架有效!非常感谢。我不明白为什么按钮在没有框架的情况下显示(黑色)。并且 addTarget(变成红色)没有框架不会显示。
  • 这种情况总是发生在 frame 上,实际上 mainView 的默认 frame 为零,但是如果你设置 mainview.clipsToBounds = true 按钮就不会显示
【解决方案2】:

这是因为您只是在初始化 UIView 而不给它任何框架并将其添加到主视图中。

您还需要为主视图提供框架。例如:

class ViewController: UIViewController {
   var mainview = UIView()
   override func viewDidLoad() {
        super.viewDidLoad()
        mainview.frame = CGRect(x: 10, y: 50, width: 300, height: 300)
        self.view.addSubview(mainview)
        mainview.addSubview(Feld.createButton())
    }        
}

【讨论】:

    【解决方案3】:

    以下是 ViewController 类的更改并且工作正常:

    class ViewController: UIViewController {
        var  mainview: UIView!
        override func viewDidLoad() {
            super.viewDidLoad()
            mainview = UIView(frame: self.view.bounds)
            mainview.addSubview(Feld.createButton())
            self.view.addSubview(mainview)
    
        }
    }
    

    【讨论】:

    • 问题出在 mainView 框架
    猜你喜欢
    • 1970-01-01
    • 2018-01-19
    • 1970-01-01
    • 2020-10-01
    • 2019-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多