タグ別アーカイブ: cheatSheet

今更きけないUILabelの基本まとめ

概要

UILabelはUIViewを継承したクラス。
固定された内容のテキストを画面に貼付けるのに使う。
生成したら必ずどこぞのコントローラ下のViewにaddSubviewする。

UILabelTest

プロパティ

設定できるプロパティは以下の通り。

text

  • NSStringでパラメータ付与。
  • ラベル内に表示する文字列を指定する。

font

 

  • UIFontで指定。
  • フォントの種類を指定。フォントオブジェクトはその章を参照。
  •  

textColor

   

  • UIColorでパラメータ付与。
  • フォントの色を変える。
  •  

lineBreakMode

   

  • UILineBreakMode定数を指定する。
  • 文字数オーバー時の表現方法を指定。
  •  

enabled

   

  • BOOL指定。
  • グレー反転させて使用不可表現を行う。
  •  

adjustsFontSizeToFitWidth

   

  • BOOL指定。
  • textで指定した文字列がラベルの矩形内に納まる様にアジャストするか否かを指定する。
  • これをYESニシタバアイハlineBreakModeが無効になる。
  •  

baselineAdjustment

   

  • UIBaselineAdjustmentを文字列定数で指定。
  •  

minimumFontSize

   

  • CGFloatで指定。
  • 次に記述するnumberOfLinesが1の時のみ効果が出る。
  •  

numberOfLines

   

  • NSInteger指定。
  • textで指定された文字列を表示する限界の行数を指定する。
  •  

highlightedTextColor

   

  • UIColor指定。
  • ハイライトされた際の文字色を指定する。
  •  

highlighted

   

  • BOOL指定
  • ハイライトするか否かを指定する。
  •  

shadowColor

   

  • UIColor指定。
  • highlightedが有効だと
  •  

shadowOffset

   

  • CGSize指定。
  • CGSizeはCGFloat型のwidthとheightの2部構成。CGSizeMake(w,h)で作成。
  •  

userInteractionEnabled

   

  • BOOL指定。
  • タッチの検出をするか否か。しない、がデフォ。
  •  

メソッド一覧

    drawTextInRect:

    • このメソッドは直接呼ばない方が良い。継承したサブクラスのデフォルトの振舞で描画したい時に呼ばれるべきだ。
    • このメソッドが呼ばれる時、現在の描画コンテキスト(デフォルトの環境とテキストの色で)の設計が完了する。
    • Overrideしたメソッドではsuper使って同名メソッドを発動させよう。

    textRectForBounds:limitedToNumberOfLines:

       

    • ラベルのテキストの矩形(CGRect)を返す。
    • parameter
      • bounds(CGRect)
      •      

        • レシーバの矩形を渡す
      • numberOfLines:(NSInteger)
      •          

        • 最大行数を渡す
    • このメソッドは直接呼ぶべきではない。レシーバに指定した矩形に何かしらの計算を伴う動作をさせる前に、継承したサブクラスがOverrideしたメソッドから呼ぶべきだ。
    • 最大行数を指定するnumberOfLinesパラメータを使って高さの上限を返される矩形に指定できる。
    • メソッドを呼ぶためにはsizeToFitか、sizeThatFitsの呼び出しが先だ。
    • UITableViewCellオブジェクト内のUILabel、またはサイズ指定のないUILabelはセルの寸法ベースのサイズが適用される。
    •    

    UILineBreakModeについて

    矩形に対する文字列幅がオーバーした際の表現方法を指定する。
    もともと行数指定をしてた場合は矩形幅がたらなくなるところまでは大凡共通した仕様で改行が行われる。
    UILineBreakModeCharacterWrapは例外で、Word間で自動改行ではなく、たらなくなった時点で改行が行われるので1単語を切ることになるので注意が必要。
    UILabel_Preview

    typedef enum {
       UILineBreakModeWordWrap = 0,
       UILineBreakModeCharacterWrap,
       UILineBreakModeClip,
       UILineBreakModeHeadTruncation,
       UILineBreakModeTailTruncation,
       UILineBreakModeMiddleTruncation, } UILineBreakMode;
    

    サンプル

    このサンプルを実行すると本記事のトップで表示した画像とおなじViewになる。

    - (void)viewDidLoad
    {
        NSLog(@"%s",__func__);
        [super viewDidLoad];
        
        float margine = 5;
        float y = 5;
        float h = 70;
        CGRect rect1 = CGRectMake(10,y,300,h);
        UILabel* label_UILineBreakModeWordWrap = [[UILabel alloc]initWithFrame:rect1];
        label_UILineBreakModeWordWrap.lineBreakMode = UILineBreakModeWordWrap;
        label_UILineBreakModeWordWrap.text = @"label_UILineBreakModeWordWrapnthis is label_UILineBreakModeWordWrap this is label_UILineBreakModeWordWrap this is label_UILineBreakModeWordWrap this is label_UILineBreakModeWordWrap";
        label_UILineBreakModeWordWrap.font = [UIFont systemFontOfSize:[UIFont smallSystemFontSize]];
        label_UILineBreakModeWordWrap.textAlignment = UITextAlignmentLeft;
        label_UILineBreakModeWordWrap.numberOfLines = 3;
        [self.view addSubview:label_UILineBreakModeWordWrap];
        
        y += h + margine;
        
        CGRect rect2 = CGRectMake(10,y,300,h);
        UILabel* label_UILineBreakModeTailTruncation = [[UILabel alloc]initWithFrame:rect2];
        label_UILineBreakModeTailTruncation.lineBreakMode = UILineBreakModeTailTruncation;
        label_UILineBreakModeTailTruncation.text = @"label_UILineBreakModeTailTruncationnthis is label_UILineBreakModeTailTruncation this is label_UILineBreakModeTailTruncation this is label_UILineBreakModeTailTruncation this is label_UILineBreakModeTailTruncation";
        label_UILineBreakModeTailTruncation.font = [UIFont systemFontOfSize:[UIFont smallSystemFontSize]];
        label_UILineBreakModeTailTruncation.textAlignment = UITextAlignmentLeft;
        label_UILineBreakModeTailTruncation.enabled = NO;
        label_UILineBreakModeTailTruncation.adjustsFontSizeToFitWidth = YES;
        label_UILineBreakModeTailTruncation.baselineAdjustment = UIBaselineAdjustmentAlignBaselines;//UIBaselineAdjustmentNone;//UIBaselineAdjustmentAlignCenters;//
        label_UILineBreakModeTailTruncation.numberOfLines = 3;
        label_UILineBreakModeTailTruncation.highlighted = YES;
        label_UILineBreakModeTailTruncation.shadowColor = [UIColor redColor];
        label_UILineBreakModeTailTruncation.shadowOffset = CGSizeMake(3.0, 2.0);
        [self.view addSubview:label_UILineBreakModeTailTruncation];
    
        y += h + margine;
    
        CGRect rect3 = CGRectMake(10,y,300,h);
        UILabel* label_UILineBreakModeMiddleTruncation = [[UILabel alloc]initWithFrame:rect3];
        label_UILineBreakModeMiddleTruncation.lineBreakMode = UILineBreakModeMiddleTruncation;
        label_UILineBreakModeMiddleTruncation.text = @"label_UILineBreakModeMiddleTruncationnthis is label_UILineBreakModeMiddleTruncation this is label_UILineBreakModeMiddleTruncation this is label_UILineBreakModeMiddleTruncation";
        label_UILineBreakModeMiddleTruncation.font = [UIFont systemFontOfSize:[UIFont smallSystemFontSize]];
        label_UILineBreakModeMiddleTruncation.textAlignment = UITextAlignmentLeft;
        label_UILineBreakModeMiddleTruncation.numberOfLines = 3;
        label_UILineBreakModeMiddleTruncation.highlighted = NO;
        label_UILineBreakModeMiddleTruncation.highlightedTextColor = [UIColor blueColor];
        label_UILineBreakModeMiddleTruncation.shadowColor = [UIColor redColor];
        label_UILineBreakModeMiddleTruncation.shadowOffset = CGSizeMake(3.0, 2.0);
    
        [self.view addSubview:label_UILineBreakModeMiddleTruncation];
        
        y += h + margine;
    
        CGRect rect4 = CGRectMake(10,y,300,h);
        UILabel* label_UILineBreakModeHeadTruncation = [[UILabel alloc]initWithFrame:rect4];
        label_UILineBreakModeHeadTruncation.lineBreakMode = UILineBreakModeHeadTruncation;
        label_UILineBreakModeHeadTruncation.text = @"label_UILineBreakModeHeadTruncationnthis is label_UILineBreakModeHeadTruncation this is label_UILineBreakModeHeadTruncation this is label_UILineBreakModeHeadTruncation";
        label_UILineBreakModeHeadTruncation.font = [UIFont systemFontOfSize:[UIFont smallSystemFontSize]];
        label_UILineBreakModeHeadTruncation.textAlignment = UITextAlignmentLeft;
        label_UILineBreakModeHeadTruncation.numberOfLines = 3;
        label_UILineBreakModeHeadTruncation.highlighted = YES;
        label_UILineBreakModeHeadTruncation.highlightedTextColor = [UIColor blueColor];
        label_UILineBreakModeHeadTruncation.shadowColor = [UIColor redColor];
        label_UILineBreakModeHeadTruncation.shadowOffset = CGSizeMake(3.0, 2.0);
    
        [self.view addSubview:label_UILineBreakModeHeadTruncation];
    
        y += h + margine;
    
        CGRect rect5 = CGRectMake(10,y,300,h);
        UILabel* label_UILineBreakModeClip = [[UILabel alloc]initWithFrame:rect5];
        label_UILineBreakModeClip.lineBreakMode = UILineBreakModeClip;
        label_UILineBreakModeClip.text = @"label_UILineBreakModeClipnthis is label_UILineBreakModeClip this is label_UILineBreakModeClip this is label_UILineBreakModeClip this is label_UILineBreakModeClip";
        label_UILineBreakModeClip.font = [UIFont systemFontOfSize:[UIFont smallSystemFontSize]];
        label_UILineBreakModeClip.textAlignment = UITextAlignmentLeft;
        label_UILineBreakModeClip.numberOfLines = 3;
        label_UILineBreakModeClip.userInteractionEnabled = NO;
        [label_UILineBreakModeClip textRectForBounds:CGRectMake(50,y,100,h) limitedToNumberOfLines:0];
        [self.view addSubview:label_UILineBreakModeClip];
    
        y += h + margine;
    
        CGRect rect6 = CGRectMake(10,y,300,h);
        UILabel* label_UILineBreakModeCharacterWrap = [[UILabel alloc]initWithFrame:rect6];
        label_UILineBreakModeCharacterWrap.lineBreakMode = UILineBreakModeCharacterWrap;
        label_UILineBreakModeCharacterWrap.text = @"label_UILineBreakModeCharacterWrapnthis is label_UILineBreakModeCharacterWrap this is label_UILineBreakModeCharacterWrap this is label_UILineBreakModeCharacterWrap this is label_UILineBreakModeCharacterWrap";
        label_UILineBreakModeCharacterWrap.font = [UIFont systemFontOfSize:[UIFont smallSystemFontSize]];
        label_UILineBreakModeCharacterWrap.textAlignment = UITextAlignmentLeft;
        label_UILineBreakModeCharacterWrap.numberOfLines = 3;
        label_UILineBreakModeCharacterWrap.userInteractionEnabled = YES;
        [label_UILineBreakModeCharacterWrap drawTextInRect:CGRectMake(10,y,100,h)];
        [self.view addSubview:label_UILineBreakModeCharacterWrap];
    }
    

    詳解 Objective-C 2.0 第3版

    Objective-C プログラマーズバイブル

Xcode4.2デバッグ環境構築とgdbのチートシート

main内で止まるとバグを追いにくくてハマるのでできるだけ追いやすい様にと色々調べてみた。

  1. どんなデバッグ方法があるのか知る
  2. デバッグ向きの環境に作り替える
  3. gdbを触れる様にしとく

どんなデバッグ方法があるのか知る

NSLogだけじゃない、こんな方法あんな方法、まず知っておく。

デバッグ向き環境に作り替える

Xcode左上のプロジェクトを選択して環境

12_02_01-02

 

3つの環境変数を追加できたらOKボタン。

12_02_01-02

gdbを触れる様にしておく

gdbはデバッグ時に使えるコマンド。
gdb_window

Xcodeの最下部のコンソールに入力して様々な情報を得る事ができる。

 

詳しくはApple のdebugging with gdbを参照。

チートシートも見つけたのでよかったらどうぞ。
http://darkdust.net/files/GDB%20Cheat%20Sheet.pdf

 

【objective-c】 setKeyboardType一覧


setKeyboardTypeで指定する定数がいっぱいあったので一覧化。
違いがわかったりわからなかったり。

iOSでテキスト入力箇所をアクティブにした際に呼ばれるキーボードの指定一覧

指定

サンプル
UIKeyboardAppearanceDefault

UIKeyboardTypeDefault1
UIKeyboardTypeDefault2

UIKeyboardTypeTwitter

UIKeyboardTypeTwitter1UIKeyboardTypeTwitter2

UIKeyboardTypeAlphabet

UIKeyboardTypeAlphabet

UIKeyboardTypeEmailAddress

UIKeyboardTypeEmailAddress1
UIKeyboardTypeEmailAddress2

UIKeyboardTypePhonePad

UIKeyboardTypePhonePad

UIKeyboardTypeNumberPad

UIKeyboardTypeNumberPad

UIKeyboardTypeURL

UIKeyboardTypeURL1UIKeyboardTypeURL2

UIKeyboardTypeNumbersAndPunctuation

UIKeyboardTypeNumbersAndPunctuation1UIKeyboardTypeNumbersAndPunctuation2

UIKeyboardTypeASCIICapable

UIKeyboardTypeASCIICapable

UIKeyboardTypeDefault

UIKeyboardTypeDefault1UIKeyboardTypeDefault2

おまけ

テキストエリア生成コードサンプル

objective-c:
-(UITextField*)makeTextField:(CGRect)rect text:(NSString*)text type:(NSInteger*)type{
    //テキストフィールドを生成し、rect,text,色,キーボードに関する情報をセットして返す。
    UITextField* textField = [[[UITextField alloc] init] autorelease];
    [textField setFrame:rect];
    [textField setBackgroundColor:[UIColor whiteColor]];
    [textField setBorderStyle:UITextBorderStyleRoundedRect];
    //以下がキーボード関連。キーボードのアピアランス、キーボードの種別、改行キーの種別
    [textField setKeyboardAppearance:UIKeyboardAppearanceDefault];
    switch((NSInteger)type){
        case 1:
            [textField setKeyboardType:UIKeyboardTypeDefault];
            [textField setText:@"UIKeyboardTypeDefault"];
            break;
        case 2:
            [textField setKeyboardType:UIKeyboardTypeASCIICapable];
            [textField setText:@"UIKeyboardTypeASCIICapable"];
            break;
        case 3:
            [textField setKeyboardType:UIKeyboardTypeNumbersAndPunctuation];
            [textField setText:@"UIKeyboardTypeNumbersAndPunctuation"];
            break;
        case 4:
            [textField setKeyboardType:UIKeyboardTypeURL];
            [textField setText:@"UIKeyboardTypeURL"];
            break;
        case 5:
            [textField setKeyboardType:UIKeyboardTypeNumberPad];
            [textField setText:@"UIKeyboardTypeNumberPad"];
            break;
        case 6:
            [textField setKeyboardType:UIKeyboardTypePhonePad];
            [textField setText:@"UIKeyboardTypePhonePad"];
            break;
        case 7:
            [textField setKeyboardType:UIKeyboardTypeEmailAddress];
            [textField setText:@"UIKeyboardTypeEmailAddress"];
            break;
        case 8:
            [textField setKeyboardType:UIKeyboardTypeAlphabet];
            [textField setText:@"UIKeyboardTypeAlphabet"];
            break;
        case 9:
            [textField setKeyboardType:UIKeyboardTypeTwitter];
            [textField setText:@"UIKeyboardTypeTwitter"];
            break;
        default:
            break;

    }
    [textField setReturnKeyType:UIReturnKeyDone];
    return textField;
}

iOSプログラミング逆引きリファレンス108 ~知りたいことがすぐわかるiPhoneプログラミングテクニック~

iPhoneプログラミングUIKit詳解リファレンス

iOSデバッグ&最適化技法 for iPad/iPhone
詳解 Objective-C 2.0 第3版