【问题标题】:Cannot update UIButton.image after view loads视图加载后无法更新 UIButton.image
【发布时间】:2016-01-04 18:13:42
【问题描述】:

我正在尝试一些相对简单的事情。我有一个加载图像的 UIButton:

@IBOutlet var peer5Outlet: UIButton!

    override func viewDidLoad() {
    super.viewDidLoad()

    peer5Outlet.enabled = true
    var img = UIImage(named: "camera")
    peer5Outlet.setImage(UIImage(named: "camera"),forState: UIControlState.Normal) }

加载后,我只想通过调用方法来更新该图像:

func updateButtonImage() {

    peer5Outlet.imageView!.image = UIImage(named: "connected")!

    print("peer5Outlet.imageView!.image = \(peer5Outlet!.imageView!.image!)")

}

但是,我仍然无法更新图像;原始图像在视图中永远不会改变。

也许我缺少某种视图重新加载方法?

【问题讨论】:

  • 你需要像viewDidLoad一样设置图片,通过setImage()

标签: ios swift uibutton


【解决方案1】:

将您的 updateButtonImage 函数更新为

func updateButtonImage() {
    peer5Outlet.setImage(UIImage(named: "connected"), forState: .Normal)
    print("peer5Outlet.imageView!.image = \(peer5Outlet!.imageView!.image!)")
}

【讨论】:

  • 谢谢 - 成功了。但是,让我再问一个问题 - 如果这更适合单独的帖子,请原谅我:我希望从不同的类(Swift 文件)更改 UIButton 图像。我通过这种方式调用方法来做到这一点(SendSoundsViewControlller() 是具有该方法的 VC):SendSoundsViewController().updateButtonImage() 但是当我这样做时,编译器告诉我我的 UIButton 为 nil:致命错误:意外发现 nil 而展开可选值
  • 这就是为什么它是 viewController 的不同实例。我真的可以推荐一个新问题或进行搜索,SO 上有很多关于此问题的帖子。
  • @CharlieStephenson 这是你可以做到的一种方式stackoverflow.com/a/25204814/5576310
  • 啊,谢谢。我会试试这个。真的很感激。
  • Np,上述解决方案对您有用吗@CharlieStephenson?
【解决方案2】:

试试

peer5Outlet.setBackgroundImage(UIImage(named: "connected"), forState: UIControlState.Normal)

编辑:为了使用 setImage 方法,您需要将按钮的类型更改为“自定义”...

【讨论】:

    【解决方案3】:

    当你在 UI 上触摸 UIImage 时,你需要使用主线程

    GCD - main vs background thread for updating a UIImageView

    func updateButtonImage() {
        dispatch_async(dispatch_get_main_queue()) {
            // update image
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-23
      • 2016-08-31
      相关资源
      最近更新 更多