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");
}

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