有關Style sheet的用法參考前篇
Three20的document跟Android比起來不遑多讓, 實在也少的可憐, 當然啦, 這樣也有另一種樂趣, 就是上網找跟追code囉!
剛嫌我的code在Launcher View上面的字型實在太醜, 很想把它改掉, 第一個想到的當然是Style sheet, 但遍尋TTStyleSheet, TTDefaultStyleSheet的document, 找不到類似的東西
後來在TTLauncherButton.m發現這一行:
[self setStylesWithSelector:@“launcherButton:”];
難不成就是"launcherButton"?
所以就試著在style sheet的class中加入:
- (TTStyle*)launcherButton:(UIControlState)state {
UIColor *color = RGBCOLOR(30, 30, 30);
return [TTTextStyle styleWithFont:[UIFont systemFontOfSize:12]
color: color
minimumFontSize:12 shadowColor:nil
shadowOffset:CGSizeZero next:nil];
}
直覺想說是字型, 所以用了TTTextStyle, 不過這樣的code下場是….圖不見了!!
由於剛剛是在TTLauncherButton發現的, TTLauncherButton繼承自TTButton, 所以看了一下TTButton, label的字型是TTTextStyle沒錯, 而圖是TTPartStyle, 所以兩者都要給, 缺一不可, 而以TTButton.m的這行code來看:
TTPartStyle* imageStyle = [style styleForPart:@“image”];
圖的名字是"image"
(TTPartStyle *) + styleWithName:style:next:
TTPartStyle的constructor除了name以外還需要style和next, TTStyle是個linked list, 所以沒有下一個style, next就指定成nil就好, 但style這參數卻不可, 試過給nil, 圖還是不見, 所以還是得繼續找怎回事
這時侯只好到Three20Style裡把TTDefaultStyleSheet.m的source挖出來看囉….(一挖出來發現, 我一開始就看這隻就好了嘛… = =“)
看了一下TTDefaultStyleSheet的launcherButton是這樣寫的:
- (TTStyle*)launcherButton:(UIControlState)state {
return
[TTPartStyle styleWithName:@"image” style:TTSTYLESTATE(launcherButtonImage:, state) next:
[TTTextStyle styleWithFont:[UIFont boldSystemFontOfSize:11] color:RGBCOLOR(180, 180, 180)
minimumFontSize:11 shadowColor:nil
shadowOffset:CGSizeZero next:nil]];
}
return [TTTextStyle styleWithFont:[UIFont boldSystemFontOfSize:12]
color: color
minimumFontSize:12 shadowColor:nil
shadowOffset:CGSizeZero next:[TTPartStyle styleWithName:@“image”
style:TTSTYLESTATE(launcherButtonImage:, state) next:nil]];
(跟TTDefaultStyleSheet.m裡面那段有點小不同是, 一來是我是直接接在剛剛那段Text style後面, 二來只是驗證一下順序有沒差, 不過當然是沒關係的)