ラベル プロパティ の投稿を表示しています。 すべての投稿を表示
ラベル プロパティ の投稿を表示しています。 すべての投稿を表示

2011年6月16日木曜日

UITabBarControllerのselectedIndex

UITabBarControllerのプロパティ、selectedIndexは
選択中のタブ番号(左から0~)返してくれるやつなんですが、
タブ切り替えでこのselectedIndexが変わるタイミングが若干ずれることに気づいた。

タブ0→タブ1に切り替えた際のタブ1の
ビューコントローラーで走るビューサイクルの例です。
※自分が乗ってるタブバーのインスタンス(tabBar)はどうにかして取得すること前提

-(void)viewWillAppear:(BOOL)animated{
     [super viewWillAppear:animated];
     NSLog(@"nowTabIndex:%d",tabBar.selectedIndex);//この時点ではtab0
}

-(void)viewDidAppear:(BOOL)animated{
     [super viewDidAppear:animated];
     NSLog(@"nowTabIndex:%d",tabBar.selectedIndex);//この時点ではtab1
}

…タブ切り替わった瞬間にindex変わろうよ!!

ところでタブバーに乗ってるビューコンからタブバーのインスタンスって
どうやって取得するんだ…?ナビコンみたいにセルフに問い合わせればたどり着けるの?
ぬーんタブバーあまり扱わないから未知数です…。

2011年2月24日木曜日

角丸UIView

#import <QuartzCore/QuartzCore.h>//使用クラスにインポートの必要あり

-(void)createKadomaru{
 UIView * maru = [[[UIView alloc] initWithFrame:CGRectMake(0,0,100,100)] autorelease];
 maru.center = self.view.center;
 maru.backgroundColor = [UIColor whiteColor];
 maru.layer.cornerRadius = 4.0;//角の丸み 値が大きいほど丸い
 maru.clipsToBounds = YES;
 [self.view addSubview:maru];
}

←完成はこんな感じ。
今まで角丸部分は画像を用意してたのに…
これは便利。QuartzCoreのインポートを忘れないこと。
clipsToBoundsはUIViewのプロパティでYESならサブビューを
メインビューの内側に描画。(デフォルトはNO)

2011年1月13日木曜日

drawRect 再描画の注意点

UIViewなどにdrawRectで描画した線や図形を消去、再描画するには
//全再描画
[drawView setNeedsDisplay];
//一部再描画なら
[drawView setNeedsDisplayInRect:CGRectmake(0,0,100,100)];
をする。注意したいのはdrawViewが元々透明でなければ
前回分の描画が残ってしまうということ。

drawViewのinitWithFrameメソッド内にでも透明プロパティを設定すること!
※初期値は不透明の設定
drawView.opaque=YES
drawRectで描いたものはUIViewの背景色みたいな扱いだから
違う位置に再描画しても前回分が残ってしまうのかなーとか思うことに。
ちなみに前回分を消去して画面をクリアにしたい場合は、View自体になんか
フラグでも持たせてdrawRect内の描画部分をフラグによって素通りするように
すればいいと思います。

2010年11月11日木曜日

UIButtonの同時押し防止

マルチタップさせたくないボタンなどに
exclusiveTouchのプロパティを設定する
exclusiveTouch
UIViewのプロパティ。YESなら同ウインドウ内の他ビューにおける
タッチイベントを受け付けない。デフォルト:NO

multitapcancelbtn.exclusiveTouch=YES;

2010年10月22日金曜日

UIButtonのタイトルを複数行にする

ボタンにlineBreakModeを無理矢理設定する。通常はラベルに使うプロパティ。
ただし2行以上の場合[Btn sizeToFit];をしても、横長になってしまうため
ボタンの大きさは自分で調整する必要がある。

※追記 若干修正とスクリーンショットを追加してみました。

((UILabel*)Btn).lineBreakMode=UILineBreakModeWordWrap;

↓↓↓ついでにボタンのプログラム生成手順も。↓↓↓↓
- (void)viewDidLoad {
    [super viewDidLoad];
    UIButton *Btn = [UIButton buttonWithType:
                        UIButtonTypeRoundedRect];
    [Btn setFrame:CGRectMake(0,0, 0.0, 0.0)];
    NSString*_name = @"長い長い長い長い長い長い長い長い"; 
    //10字1行として行数をカウント
    int column = ((int)([_name length]/10))+1;
    //改行コードを10字置きに入れる
    NSMutableString*str= [NSMutableString stringWithCapacity:1];
    int now = 0;
    int last = [_name length]-1;
    for(int cnt = 0; cnt < column; cnt++){
     if(cnt != column-1){
         [str appendFormat:@"%@\n",
         [_name substringWithRange:NSMakeRange(now,10)]];
         now += 10;
     }else{//最後
         [str appendString:[_name substringWithRange:
                            NSMakeRange(now,last-now+1)]];
     }
    }

    //複数行
    ((UILabel*)Btn).lineBreakMode = UILineBreakModeWordWrap;
    //タイトル
    [Btn setTitle:str forState:UIControlStateNormal];
    //ボタンのサイズ
    [Btn setFrame:CGRectMake(0,0,150,(14*column)+30)];
    //フォント
    [Btn.titleLabel setFont:[UIFont systemFontOfSize:14]];
    //文字を中央揃えに
    [Btn.titleLabel setTextAlignment:UITextAlignmentCenter];
    //文字色
    [Btn setTitleColor:[UIColor blackColor] 
                    forState:UIControlStateNormal];
    //タグ
    [Btn setTag:1];
    //アクション登録
    [Btn addTarget:self action:@selector(clickButton:)
                forControlEvents:UIControlEventTouchUpInside];
 
    //ボタンをビューに追加
    [self.view addSubview:Btn];
 
    Btn.center=self.view.center;
}

-(void)clickButton:(UIButton*)sender{
 NSLog(@"Click");
}

↓できあがりはこんな感じ↓

2010年10月12日火曜日

階層下のボタンや画像のタッチイベントを受け付ける

一つ上のViewがかぶさって下に配置しているボタンや
Viewにタッチイベントが効かない場合、
一つ上のビューのuserInteractionEnabledをNOにする。

aboveView.userInteractionEnabled=NO;

プロパティ
userInteractionEnabled
…YESならばタッチイベントやキーイベントが有効になる。デフォルト:YES