フツーにNSStringでdrawAtPointにしといたほうがよかったか・・。
とりあえずTruncate処理を付け加えることはできた。
ウィンドウをのサイズを変えるとこんなふうになる。
日本語でも処理そのものには全く支障がなかった。賢いぞCocoa。
考え方としては
1,描画したい領域のWidthよりも文字列のsize.widthが大きかったら
2,文字列をMutableStringにコピーして
3,forループで最終文字から1文字ずつ削りとり
4,描画したい領域より文字列のwidthが小さくなったら
5,forループから抜け出て
6,さらにうしろから2文字分削りとり
7、「..」を付け加る
という感じになる。ただしAttributedがはいるのでソースはこんなに汚くなる。(^^;)
NSAttributedString* sourceAttributedTitle=[[[NSAttributedString alloc] initWithString:title attributes:stringAttrbutes]autorelease]; NSMutableAttributedString *titleForDraw=[[[NSMutableAttributedString alloc] initWithAttributedString:sourceAttributedTitle]autorelease]; if([sourceAttributedTitle size].width> cellFrame.size.width){ for (NSInteger i=[sourceAttributedTitle length]-1;i>0; i--) { [titleForDraw deleteCharactersInRange:NSMakeRange(i, 1)]; if ([titleForDraw size].width< cellFrame.size.width){ break; } } [titleForDraw deleteCharactersInRange:NSMakeRange([titleForDraw length]-2,2)]; [titleForDraw appendAttributedString:[[NSAttributedString alloc] initWithString:@".." attributes:stringAttrbutes]]; }bloggerに文句を言われるため不等号は全角にしてある。
一応これで動くのでよしとするが、今後tabを増やす処理を付け加えていけば当然「1文字も描画できないせまさのtab」ができてしまうこともあるので、tabの最小幅を設定して、「見えなくなったtab」にどうにかしてアクセスする方法を考えていかなければ・・・。
その前に、現在はプレースホルダでしかない「新しいtabを増やす」、「tabを閉じる」ボタンを実装するほうが先か。
0 件のコメント:
コメントを投稿