質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Q&A

解決済

1回答

423閲覧

UIButtonに画像を入れたい

momokoko

総合スコア38

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

0グッド

0クリップ

投稿2020/06/27 01:56

編集2020/06/27 02:41

(5fc5ffc390e6e78546715986887789bf.png)UIButtonに画像を入れたいです。
レイアウト系もコードで実装していてStoryboardを使用しておりません。
以下のコードでは問題なくビルドできるものの画像が挿入されませんでした。

import UIKit class ViewController: UIViewController { let plusbtn: UIButton = { let button = UIButton(type: .system) let plusimage:UIImage = UIImage(named:"plus")! button.setImage(plusimage, for: .normal) return button }() let minesbtn: UIButton = { let button = UIButton(type: .system) button.setImage(#imageLiteral(resourceName: "minus"), for: .normal) button.tintColor = .red return button }() override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = .blue view.addSubview(plusbtn) plusbtn.anchor(top: view.topAnchor, left: view.leftAnchor, bottom: nil, right: view.rightAnchor, paddingTop: 300, paddingLeft: 0, paddingBottom: 0, paddingRight: 200, width: 200, height: 200) view.addSubview(minesbtn) minesbtn.anchor(top: view.topAnchor, left: view.leftAnchor, bottom: nil, right: view.rightAnchor, paddingTop: 300, paddingLeft: 200, paddingBottom: 0, paddingRight: 0, width: 200, height: 200) } } }
import UIKit extension UIView{ // anchorを使うための準備コード func anchor(top: NSLayoutYAxisAnchor?, left: NSLayoutXAxisAnchor?, bottom: NSLayoutYAxisAnchor?,right: NSLayoutXAxisAnchor?, paddingTop: CGFloat, paddingLeft: CGFloat, paddingBottom: CGFloat, paddingRight:CGFloat, width: CGFloat, height: CGFloat){ //AutoLayoutの有効化。UI部品の位置や大きさを指定できる translatesAutoresizingMaskIntoConstraints = false if let top = top { self.topAnchor.constraint(equalTo: top, constant: paddingTop).isActive = true } if let left = left { self.leftAnchor.constraint(equalTo: left, constant: paddingLeft).isActive = true } if let bottom = bottom { self.bottomAnchor.constraint(equalTo: bottom, constant: -paddingBottom).isActive = true } if let right = right { self.rightAnchor.constraint(equalTo: right, constant: -paddingRight).isActive = true } if width != 0{ widthAnchor.constraint(equalToConstant: width).isActive = true } if height != 0{ heightAnchor.constraint(equalToConstant: height).isActive = true } } }

ビルドはできますが、画像が挿入されていません。

イメージ説明

Assets.xcassets内
イメージ説明
エラーが出ておらずどこを直したらいいのか検索もできない状態です。
ご教授頂けたら嬉しいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

akaakoz

2020/06/27 02:20

以下をチェックしてみてください。 1. UIImage設定時のファイル名はAssets.xcassets内のファイル名をちゃんと定義してますか? 2. Xcodeを一旦終了して、再起動する
momokoko

2020/06/27 02:27 編集

ありがとうございます。 1.については問題なく指定できていると思います。 試したこと: Assets.xcassetsに入っていない画像名を入れてビルドしてみた結果、エラーになりました。 let plusimage:UIImage = UIImage(named:"testtest")! button.setImage(plusimage, for: .normal) return button エラーコード Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value plusと入れているときはエラーが出ていないのでちゃんと定義できているかと思います。 念の為、Assets.xcassetsのスクリーンショットを質問文に追加しました。 2をしてみましたが、結果はうまく行きませんでした。
momokoko

2020/06/27 02:40 編集

ありがとうございます。 レイアウト系もコードで実装していて、初期値はCustomなので、これが原因ではないのかもと思いました。
akaakoz

2020/06/27 02:46

なるほど。では以下を試してみてください 1. button.setImage(plusimage.withRenderingMode(.alwaysOriginal), for: .normal) 2. backGroundcolorをクリアにしてみる (button.backgroundColor = .clear)
momokoko

2020/06/27 04:42

ありがとうございました! 1の方法で無事画像が表示されました!
guest

回答1

0

自己解決

let plusbtn: UIButton = { let button = UIButton(type: .system) let plusimage = UIImage(named:"plus")! button.setImage(plusimage.withRenderingMode(.alwaysOriginal), for: .normal) return button }() let minusbtn: UIButton = { let button = UIButton(type: .system) let minusbtn = UIImage(named: "minus")! button.setImage(minusbtn.withRenderingMode(.alwaysOriginal), for: .normal) return button }()

akaakozさんのアドバイスで解決できました。自己解決するのは恐縮ですが、上記のコードで画像が表示されました。

投稿2020/06/27 04:44

momokoko

総合スコア38

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問