Posts Tagged ‘程式技術’

如何在Objective-C中宣告一個 private function?

Sunday, September 2nd, 2012

這是一個很簡單很基本的問題,寫過Java或C++的人都知道怎麼寫
不過,Objective-C居然沒有支援,這讓我從兩年前開始學Objective-C時就覺得很納悶
我也沒有特別去找有沒有什麼方法可以做到,今天在看cocos2d的書時剛好有講到,寫下來免得忘記

方法就是在 .m 檔裡的 @implementation 之前另外加入 @interface 的宣告 (一般而言 @interface 都是在 .h 裡做)
例:

#import “MyClass.h”
@interface MyClass()
- (void) doMyPrivateFunction;
- (int) getMyMagicNumber;
@end

@implementation MyClass
….. (略)
@end

如何不讓Xcode自動加中括號?

Thursday, August 9th, 2012

繼上次在Xcode coding時會出現中括號一直對應失敗的問題後(i.e. [[instance method] ]; )。今天不知為何又出現了… 快被這個問題煩死。真的很無奈,重開了n次也沒用。最後終於找到了怎麼把這個該死的功能暫時拿掉。寫在這裡,避免以後又忘記… ~”~

如圖片,在上方工具列的 Xcode -> Preferences。”Balance brackets in Objective-C metohd calls” 那欄不要打勾,就不會再自動幫你加中括號了…. 唉… Xcode問題還真多…

【iPhone App Dev】如何讓一個多行的UILabel垂直置頂(align vertical top)?

Monday, May 23rd, 2011

原本我以為要讓一個多行(numberOfLines > 1)UILabel元件的文字在垂置方向置頂只要寫個類似: (原本預設是置中align middle。可是這樣有時候不是你想要的排列方式,因為中間可能會多出很多空白…)

label.textAlignment = UITextAlignmentLeft;

這樣的code,一行就可搞定…。沒想到Apple居然連這樣基本的方法都沒有提供,搞的大家為了讓Label置頂還要寫一堆code來達成 ~”~…. (又是Objective-C不好用的一個證明)

上網孤了半天,整理了一下網友的寫法,寫成一個Util function,之後就不必再為這個鳥問題煩惱啦~ 如果覺得好用的話,歡迎copy拿去用沒關係…

// adjust the height of a multi-line label to make it align vertical with top
+ (void) alignLabelWithTop:(UILabel *)label {
	CGSize maxSize = CGSizeMake(label.frame.size.width, 999);
	label.adjustsFontSizeToFitWidth = NO;

	// get actual height
	CGSize actualSize = [label.text sizeWithFont:label.font constrainedToSize:maxSize lineBreakMode:label.lineBreakMode];
	CGRect rect = label.frame;
	rect.size.height = actualSize.height;
	label.frame = rect;
}

使用方法(假定lblHello是由Interface Builder做出來的):

lblHello.text = @"Hello World! Hello World! Hello World! Hello World! Hello World! Hello World! Hello World! Hello World!";
lblHello.numberOfLines = 5;
[Utils alignLabelWithTop:lblHello];

code參考:
http://stackoverflow.com/questions/1054558/uilabel-vertical-alignment