2
我創建了一個UIView上的類別與方法誰的目的是創建並返回一個UIView對象。它運行時沒有錯誤,但返回一個空的UIView。下面的代碼:UIView類別 - 自定義方法不返回UIView
#import <UIKit/UIKit.h>
@interface UIView (makeTableHeader)
-(UIView *) makeTableHeader:(NSString *)ImageName
withTitle:(NSString *)headerTitle
usingFont:(NSString *)fontName
andFontSize:(CGFloat)fontSize;
@end
這裏的執行情況:
-(UIView *) makeTableHeader: (NSString *)ImageName
withTitle:(NSString *)headerTitle
usingFont:(NSString *)fontName
andFontSize:(CGFloat)fontSize {
// Create a master-view:
UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 34)];
// Create the Image:
UIImageView *headerImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:ImageName]];
headerImageView.frame = CGRectMake(0, 0, 320, 34);
// Now create the Header LABEL:
UILabel *headerLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 0, 320, 34)];
headerLabel.text = headerTitle;
headerLabel.font = [UIFont fontWithName:fontName size:fontSize];
headerLabel.backgroundColor = [UIColor clearColor];
headerLabel.textColor = [UIColor whiteColor];
headerLabel.shadowColor = [UIColor blackColor];
headerLabel.shadowOffset = CGSizeMake(1.0, 1.0);
// Finally add both both Header and Label as subview to the main Header-view:
[headerView addSubview:headerImageView];
[headerView addSubview:headerLabel];
return headerView;
}
現在,這裏的我怎麼稱呼這個類別的方法:
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
UIView *hView = [[UIView alloc] init];
[hView makeTableHeader:@"[email protected]"
withTitle:@"Test Banner"
usingFont:@"boldSystemFont"
andFontSize:18];
return hView;
}
的代碼運行正常 - 但我得到一個空的看法。有趣的是,它確實正確地顯示了大小的視圖 - 爲它提供了我要求的CGRect座標 - 但視圖內沒有圖像或標籤。
任何人看到有什麼問題?
這工作:-)(我標記爲正確的答案)但我想知道:爲什麼你如此強烈反對使它成爲實例方法?如果你的方法的目的是**創建**並返回一個你用Class方法去的對象,那麼這是一個普遍的經驗法則嗎?因爲我見過大量的**實例**方法來創建和返回對象。你能對此有所瞭解嗎? – sirab333
'Factory'方法(用於創建實例的方法)應該始終是類方法,因爲這樣可以避免必須創建實例以創建* second *實例(這是您想要的實例)的開銷。 **這個**的例外情況是,如果您希望新實例部分基於舊實例。 – CrimsonDiego
明白了 - 很好的解釋 - 謝謝:-) – sirab333