我想要补充一下答案。希望人们能够改进这个答案。
首先,它是有效的。
XIB:
结果:
我很久以前就想为UIView创造一个子类,特别是用于tableViewCell。
这就是我做的方式。
它成功了,但在我看来,有些部分仍然有点“笨拙”。
首先,我创建了一个通常的.h、.m和xib文件。请注意,如果您创建的子类不是UIViewController的子类,苹果没有复选框可以自动创建xib。无论如何,都要创建它们。
#import <UIKit/UIKit.h>
#import "Business.h"
@interface BGUIBusinessCellForDisplay : UITableViewCell
+ (NSString *) reuseIdentifier;
- (BGUIBusinessCellForDisplay *) initWithBiz: (Business *) biz;
@end
我有一个非常简单的UITableViewCell,稍后我想用biz初始化它。
我设置了重用标识符,这是为UITableViewCell应该做的事情。
@interface BGUIBusinessCellForDisplay ()
@property (weak, nonatomic) IBOutlet UILabel *Title;
@property (weak, nonatomic) IBOutlet UIImageView *Image;
@property (weak, nonatomic) IBOutlet UILabel *Address;
@property (weak, nonatomic) IBOutlet UILabel *DistanceLabel;
@property (weak, nonatomic) IBOutlet UILabel *PinNumber;
@property (strong, nonatomic) IBOutlet BGUIBusinessCellForDisplay *view;
@property (weak, nonatomic) IBOutlet UIImageView *ArrowDirection;
@property (weak, nonatomic) Business * biz;
@end
@implementation BGUIBusinessCellForDisplay
- (NSString *) reuseIdentifier {
return [[self class] reuseIdentifier];
};
+ (NSString *) reuseIdentifier {
return NSStringFromClass([self class]);
};
然后我删除了大部分的初始化代码,并使用以下代码代替:
- (BGUIBusinessCellForDisplay *) initWithBiz: (Business *) biz
{
if (self.biz == nil)
{
self = [super init];
NSString * className = NSStringFromClass([self class]);
[[NSBundle mainBundle] loadNibNamed:className owner:self options:nil];
[self addSubview:self.view];
}
if (biz==nil)
{
return self;
}
self.biz = biz;
self.Title.text = biz.Title;
self.Address.text=biz.ShortenedAddress;
self.DistanceLabel.text=[NSString stringWithFormat:@"%dm",[biz.Distance intValue]];
self.PinNumber.text =biz.StringPinLineAndNumber;
请注意,这真的很尴尬。
首先,init有两种用法。
- 它可以在aloc之后使用。
- 我们可以使用另一个现有的类,然后只想将该现有单元格初始化为另一个业务。
所以我做了:
if (self.biz == nil)
{
self = [super init];
NSString * className = NSStringFromClass([self class]);
[[NSBundle mainBundle] loadNibNamed:className owner:self options:nil];
[self addSubview:self.view];
}
我做的另一件不好的事情是当我执行 [self addSubview:self.view]; 时。
问题是我想要 self 成为 唯一的 视图。而不是 self.view。但不知何故,它仍然能够工作。所以,是的,请帮助我改进,但这基本上就是实现自己的 UIView 子类的方法。