sir*_*333 2 iphone uitableview uiview categories
我在UIView上创建了一个类别,其方法是创建和返回UIView对象.它运行没有错误但返回一个空的UIView.这是代码:
#import <UIKit/UIKit.h>
@interface UIView (makeTableHeader)
-(UIView *) makeTableHeader:(NSString *)ImageName
withTitle:(NSString *)headerTitle
usingFont:(NSString *)fontName
andFontSize:(CGFloat)fontSize;
@end
Run Code Online (Sandbox Code Playgroud)
这是实施:
-(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;
}
Run Code Online (Sandbox Code Playgroud)
现在我在这里称之为类别方法:
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
UIView *hView = [[UIView alloc] init];
[hView makeTableHeader:@"redGradientHeader5@2x.jpg"
withTitle:@"Test Banner"
usingFont:@"boldSystemFont"
andFontSize:18];
return hView;
Run Code Online (Sandbox Code Playgroud)
}
代码运行正常 - 但我得到一个空视图.有趣的是,它确实正确地调整了视图大小 - 给它我要求的CGRect坐标 - 但视图中没有图像或标签.
有谁看到了什么问题?
您需要将方法设为class
方法,并将其指定为:
UIView *hView = [UIView makeTableHeader:@"redGradientHeader5@2x.jpg"
withTitle:@"Test Banner"
usingFont:@"boldSystemFont"
andFontSize:18];
Run Code Online (Sandbox Code Playgroud)
您正在创建两个视图 - 一个使用alloc/init,另一个使用自定义函数.但是,您只需要分配第一个hView
.这是因为在该makeTableHeader
方法中,使用的是hView
,以创建一个第二的UIView,以及将所述子视图/修改该而不是修改hView
.然后该方法返回此视图,然后立即丢弃,因为它未分配给任何内容.
或者,如果你坚持让它保持实例方法并修改视图,你就必须这样做(尽管我强烈建议不要这样做):
-(void) makeTableHeader: (NSString *)ImageName
withTitle:(NSString *)headerTitle
usingFont:(NSString *)fontName
andFontSize:(CGFloat)fontSize {
//you may want to remove all subviews here or something
// Create the Image:
self.frame = CGRectMake(0, 0, 320, 34);
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:
[self addSubview:headerImageView];
[self addSubview:headerLabel];
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1251 次 |
最近记录: |