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

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

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

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

Swift

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

Q&A

解決済

2回答

1284閲覧

swiftでadmobのバナー広告を更新したくない

todaka

総合スコア11

Xcode

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

Swift

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

0グッド

0クリップ

投稿2019/01/29 08:42

前提・実現したいこと

四つのジャンルがありボタンを押すと音声がなるシンプルなアプリを作っています。
ボタンを生成する時viewdidloadに二重のfor文でボタンを生成しています。
下にバナー広告を貼っています。
イメージ説明

発生している問題・エラーメッセージ

viewdidloadにfor文でボタンを生成し四つのカテゴリを変えるときに音声の名前を入れた配列を変えて
loadData()
viewDidLoad()
を行い表示される音声ボタンを変えているのでカテゴリを変える時viewdidload()に書いたGadBannerView()が更新されてしまいます。(一度消えてまた出てくるといった感じ)。それを消えないようにしたいのですが(つまりバナー広告がボタンでの操作に影響されないようにする)どうすればいいでしょうか。

エラーメッセージ ### 該当のソースコード viewdidloadの中身の一部 var admobView = GADBannerView() admobView = GADBannerView(adSize:kGADAdSizeBanner) // iPhone X のポートレート決め打ちです admobView.frame.origin = CGPoint(x:0, y:self.view.frame.size.height - admobView.frame.height - 34) admobView.frame.size = CGSize(width: self.view.frame.width, height:admobView.frame.height) admobView.adUnitID = TEST_ID admobView.rootViewController = self admobView.load(GADRequest()) self.view.addSubview(admobView) view.backgroundColor = UIColor(r: 61, g: 91, b: 151) navigationController?.setNavigationBarHidden(true, animated: false) let numberOfrows = 6 let numberOfLines = 3 var count = 0 var buttonArray:[UIButton] = [] let sizeOfButton = view.frame.height / 10 let widthOfSpace = ((view.frame.width - sizeOfButton * 4) / 5 ) forloop : for row in 0 ... numberOfrows { for line in 0 ... numberOfLines { let button = UIButton(type: .custom) button.backgroundColor = UIColor(r: 1, g: 101, b: 161) button.setTitleColor(UIColor.white, for: .normal) button.titleLabel?.numberOfLines = 0 button.setTitle(currentArray[row * 4 + line], for: .normal) button.frame = CGRect(x: (widthOfSpace + sizeOfButton) * CGFloat(line) + widthOfSpace, y: view.frame.height / 9.3 * CGFloat(row) + 50, width: sizeOfButton ,height: sizeOfButton ) button.layer.cornerRadius = 10 button.layer.borderColor = UIColor.white.cgColor button.layer.borderWidth = 1 button.titleLabel?.font = UIFont.boldSystemFont(ofSize: CGFloat(fontOfText)) button.tag = row * 4 + line button.addTarget(self, action: #selector(buttonPushed), for:.touchUpInside) button.showsTouchWhenHighlighted = true buttonArray.append(button) count += 1 if (count == currentArray.count) {break forloop} } } for button in buttonArray{ view.addSubview(button) } view.addSubview(buttonSegmentedControl) setupbuttonSegmentedControl() view.addSubview(admobView)

試したこと

addSubView()で試しましたがこれでは更新されてしまいます。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答2

0

自己解決

ボタンをアップデートするための関数を作りその中ではremoveFromSuperview()でボタンを全部取り除きまたaddsubViewすることによってアップデートすることができました。それをviewDidLoad()とhandleButtonsChange()関数内でよぶことでできました。removeFromSuperview()と言う関数を知らなかったのでviewDidLoad()を使うしかないと思っていました。

投稿2019/01/30 12:44

todaka

総合スコア11

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

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

0

viewDidLoad()を自分で呼んではいけません。
まずそこを直して下さい。

投稿2019/01/29 08:46

fuzzball

総合スコア16731

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

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

todaka

2019/01/29 08:49

viewDidLoad()を自分で呼ぶというのは loadData() viewDidLoad() の部分でしょうか
fuzzball

2019/01/29 08:54

もう少し書いておくと、 ・初期化処理(viewDidLoad()に書く処理) ・カテゴリ更新処理 をキチンと切り分けましょう、ということです。
todaka

2019/01/29 08:56

viewDidLoad()を使わないで画面を更新する方法があるということですか?
todaka

2019/01/29 08:57

すいません、二つ目の返信に気づかず返信してしまいました。 やって見ます。
todaka

2019/01/29 09:15

@objc func handlebuttonsChange(){ switch buttonSegmentedControl.selectedSegmentIndex { case 0: currentArray = outou case 1: currentArray = outou2 case 2: currentArray = bougen case 3: currentArray = meigen default: print("not selected") } loadView() viewDidLoad() } のように関数で分けているのですがこれじゃダメということですか?
fuzzball

2019/01/30 01:19

viewDidLoad()を自分で呼んではいけません。 まずそこを直して下さい。
todaka

2019/01/30 02:04

自分で呼んではいけないというのはviewcontroller.viewDidLoad() といった形にするということですか、それともviewdidloadを使わずにボタンを更新する方法があるということですか、質問ばかりですいません。
todaka

2019/01/30 12:46

何度も質問に回答してくださりありがとうございました。アップデートする関数を作りそれをviewdidLoad()とhandleButtonsChange()内で呼ぶことで何とかできました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問