viewWithTagメソッドは入れ子になったビューにもアクセスできるみたい
きょうお邪魔したiOS勉強会議 #2にて、
「入れ子になったUIViewも、viewWithTagで親からアクセスできるのか」と疑問が上がったので、その場でためしてみました。
せっかくなのでUP。
UIView* viewA = [[UIView alloc] initWithFrame:self.view.frame]; UIButton* buttonA = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 100, 100)]; [viewA setTag:1]; [buttonA setTag:2]; UIView* viewB = [[UIView alloc] initWithFrame:self.view.frame]; UIButton* buttonB = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 200, 200)]; [viewB setTag:3]; [buttonB setTag:4]; UIView* viewC = [[UIView alloc] initWithFrame:self.view.frame]; UIButton* buttonC = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 300, 300)]; [viewC setTag:5]; [buttonC setTag:6]; // 入れ子にする viewA -> buttonA/viewB -> buttonB/viewC -> buttonC という感じ [viewC addSubview:buttonC]; [viewB addSubview:buttonB]; [viewB addSubview:viewC]; [viewA addSubview:buttonA]; [viewA addSubview:viewB]; [self.view addSubview:viewA]; NSLog(@"%@", [self.view viewWithTag:0]); NSLog(@"%@", [self.view viewWithTag:1]); NSLog(@"%@", [self.view viewWithTag:2]); NSLog(@"%@", [self.view viewWithTag:3]); NSLog(@"%@", [self.view viewWithTag:4]); NSLog(@"%@", [self.view viewWithTag:5]); NSLog(@"%@", [self.view viewWithTag:6]);
dump結果はこちら。
<UIView: 0x6a227f0; frame = (0 0; 320 460); autoresize = W+H; layer = <CALayer: 0x6a21d90>> <UIView: 0x6a21bb0; frame = (0 0; 320 460); tag = 1; layer = <CALayer: 0x6a22040>> <UIButton: 0x6a23870; frame = (0 0; 100 100); opaque = NO; tag = 2; layer = <CALayer: 0x6a23950>> <UIView: 0x6a23e60; frame = (0 0; 320 460); tag = 3; layer = <CALayer: 0x6a23e90>> <UIButton: 0x6a23ec0; frame = (0 0; 200 200); opaque = NO; tag = 4; layer = <CALayer: 0x6a23f50>> <UIView: 0x6a24010; frame = (0 0; 320 460); tag = 5; layer = <CALayer: 0x6a24040>> <UIButton: 0x6a24070; frame = (0 0; 300 300); opaque = NO; tag = 6; layer = <CALayer: 0x6a24100>>
とれた(*'◡'*)!
tagのデフォルト値は0なので、うっかり[(UIImageView*)[view viewWithTag:0] hogehoge];とかやると、
重複している他のパーツを巻き込んで落ちかねないです。
(setTagしていないself.viewがviewWithTag:0に対応しています)
tagを設定するときは、1以上の整数にするのが望ましいですね。
もしくは、複数のパーツのtagを揃えておいて[ [view viewWithTag:1] setHidden:YES]; とまとめて消したりとかっていう使い道もあるのかも。
XCodeをカスタマイズ:エディタ部分の色を変える・キーバインドを変更する
もいっこ、iOS勉強会議 #2にて出たネタ。
意外と知られていないようだったので、めもめも。
XCode→Preferences...か、⌘+, で環境設定を開きます。
エディタ部分の色
Fonts&Colorsタブから設定できます。
ターミナルみたいにいくつかのテーマの中から選ぶことができて、そこから更に細かく調整ができるようになってます。
わたしはMidnightをベースに、文字がちょっと蛍光色すぎたのですこし彩度を落として、背景のOpacityを90%にしています。
背景透過はできるのかなー?
ちなみに、フォントは「Ricty」を使っています。全角スペースが可視化されていいかんじ。
yascentur/Ricty · GitHub
キーバインド
キーバインド(キーボードショートカット)はKey Bindingsタブから設定することができます。
実はEmacsと共通のキーバインドがデフォルトでたくさん設定されていて、C-p/n/f/bはもちろん、C-vなんかも使えます。
M-v(option+v)はデフォルトだと「√」が出てしまうので、こんな感じで設定してみてました。
まだまだ増やせそう。
他には、Chromeと同じようにcontrol(+shift)+tabで左右カラム・エディタを移れるようにしたりとか。
変更のしかたは、Allから変えたい機能を探す→Key部分をダブルクリックして編集。
プリセットもいくつか作れるみたいです。
@
XCodeの基本的なショートカットは@DNPPさんがまとめてくれていたので、こちらもあわせてぜひ。
Xcode 4 で俺がよく使うショトカまとめ