LoginSignup
18
18

More than 5 years have passed since last update.

viewWithTagメソッドの落とし穴

Posted at

今日プログラムを書いていて躓いたことがあったので書き記して置こうと思います。

具体的には、viewWithTagでviewを取得しようとした際に、2番目以降の要素は問題ないのですが、1番はじめの要素にアクセスすると落ちるようなのです。(EXC_BREAKPOINT(code=1, ...))

var button: UIButton = self.view.viewWithTag(tag) as UIButton // 落ちる

button.setBackground(...) // とかやりたい

結論から述べると、タグ「0」にしてあったことが原因らしく、tagを設定していないviewの初期値と重複している可能性があります。tagを使う場合が1以上の値を使用するほうが良さそうですね。

また、入れ子になったviewに対しても検索は有効なようです。
例えば、self.viewに対してUIScrollViewを追加して、scrollview内に新たにUILabelを追加し、入れ子のようになった状態を想定します。

var scrollView: UIScrollView = UIScrollView()
var label: UILabel = UILabel()

label.tag = 10

scrollview.addSubView(label)
self.view.addSubView(scrollview)

このとき、

var newLabel: UILabel = self.view.viewWithTag(10) as UILabel

としてもscrollviewに追加されたUILabel(label)を取得することができます。
できてしまいます…ガクガク(((( ;゚Д゚))))ブルブル
逆に言うと、入れ子になっていても重複すると思わぬところで落ちてしまうかもしれないので、注意が必要そうですね…。

18
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
18