setAttributedTitle:forState:
へのnil渡しについて、
少し不思議な挙動をするので、覚書として。
概要
通常、ボタンのタイトル設定は
・ただタイトルを設定する場合は、setTitle:forState:
・文字装飾したタイトルを設定する場合は、setAttributedTitle:forState:
となります。
ただし、文字列にnilを渡した場合、
setAttributedTitle:forState:
はsetTitle:forState:
と異なる挙動をします。
動作確認
以下のスクリーンショットは
上は、setTitle:forState:
にnil渡し
下は、setAttributedTitle:forState:
にnil渡し
です。
setTitle:forState:
は空文字になっていますが、
setAttributedTitle:forState:
は、InterfaceBuilderで設定したままのタイトルです。
setAttributedTitle:forState:
へのnil渡しは、
以前にsetTitle:forState:
でセットした文字列、
もしくはsetTitle:forState:
を未設定の場合は、InterfaceBuilderで設定したテキストになります。
ちなみに、一度setAttributedTitle:forState:
で文字列を設定してある場合でも、
再度setAttributedTitle:forState:
でnil渡しを行うと、
setTitle:forState:
やInterfaceBuilderの設定に戻ります。
nilでなく、空文字(@"")のNSAttributedString
を渡した場合でも同様の結果になります。
つまるところ
イマイチ理解に苦しむ挙動です。
setAttributedTitle:forState:
にnil渡しは、極力避けるべきでしょう。