teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

4

修正

2016/05/19 03:53

投稿

_Kentarou
_Kentarou

スコア8490

answer CHANGED
@@ -13,7 +13,8 @@
13
13
  追加質問の回答
14
14
  ---
15
15
 
16
+
16
- メソッドの中でボタンを成してもプログラム的には問題ないと思いますが、以下のようなデメリットがあります。
17
+ メソッドの中でボタンを宣言、生成してもプログラム的には問題ないと思いますが、以下のようなデメリットがあります。
17
18
  ※パット思いついたもの
18
19
 
19
20
  ・このメソッドが呼ばれる度にボタンが生成されてviewに重なっていってしまう。
@@ -34,4 +35,6 @@
34
35
  }
35
36
  }
36
37
  }
37
- ```
38
+ ```
39
+
40
+ ボタンの生成はメソッド内でも問題はないと思いますが、ボタンの宣言はインスタンス変数として保持するようにすることをお勧めします。

3

修正

2016/05/19 03:53

投稿

_Kentarou
_Kentarou

スコア8490

answer CHANGED
@@ -8,4 +8,30 @@
8
8
 
9
9
  ```
10
10
 
11
- もう一つ、ボタンの生成はメソッドの外で行ってくださいね。
11
+ もう一つ、ボタンの生成はメソッドの外で行ってくださいね。
12
+
13
+ 追加質問の回答
14
+ ---
15
+
16
+ メソッドの中でボタンを作成してもプログラム的には問題ないと思いますが、以下のようなデメリットがあります。
17
+ ※パット思いついたもの
18
+
19
+ ・このメソッドが呼ばれる度にボタンが生成されてviewに重なっていってしまう。
20
+ ・ViewControllerが管理していないのでボタンに対する変更が面倒くさい(画像変更、削除、位置変更等)
21
+
22
+
23
+ メソッド内で生成した場合のボタンの削除は以下のようになると思います。
24
+ ※`maruBtn.tag = 5`に設定した前提
25
+ ```swift
26
+ func maruBtnRemove() {
27
+
28
+ // self.viewの上に乗っているオブジェクトを順番に取得
29
+ for v in view.subviews {
30
+ // オブジェクトの型がUIButton型で、タグが5番のオブジェクトを取得
31
+ if let v = v as? UIButton where v.tag == 5 {
32
+ // そのオブジェクトを親のviewから取り除く
33
+ v.removeFromSuperview()
34
+ }
35
+ }
36
+ }
37
+ ```

2

修正

2016/05/19 03:45

投稿

_Kentarou
_Kentarou

スコア8490

answer CHANGED
@@ -8,4 +8,4 @@
8
8
 
9
9
  ```
10
10
 
11
- もう一つ、ボタンの宣言はメソッドの外で宣言してくださいね。
11
+ もう一つ、ボタンの生成はメソッドの外で行ってくださいね。

1

修正

2016/05/18 11:16

投稿

_Kentarou
_Kentarou

スコア8490

answer CHANGED
@@ -6,4 +6,6 @@
6
6
  maruBtn.removeFromSuperview()
7
7
  }
8
8
 
9
- ```
9
+ ```
10
+
11
+ もう一つ、ボタンの宣言はメソッドの外で宣言してくださいね。