我正在使用类别来解决我之前可能使用继承的一些问题。
我现在正在做的事情更多的是一个最佳实践问题,我不确定应该如何实施。我在UIActivityIndicatorView
上写了一个类别,它基本上用于将活动指示器放在任意视图中。下面你会找到我如何做的代码示例,我的主要问题是这是否好。如果是这样的话,我会很感激为什么会这么糟糕的评论。感谢。
类别:
@interface UIActivityIndicatorView (Customizations)
- (UIActivityIndicatorView *) inView:(UIView *) target;
@end
实施
@implementation UIActivityIndicatorView (Customizations)
- (UIActivityIndicatorView *) inView:(UIView *) target {
[self startAnimating];
[self setHidden:NO];
self.frame = target.bounds;
self.backgroundColor = [UIColor colorWithRed:0.0f green:0.0f blue:0.0f alpha:0.6f];
return self;
}
@end
然后我会像这样使用它:
[background addSubview:[loader inView:background]];
我猜测另一种方法是创建一个初始化函数来获取容器视图并返回“样式化”视图,或者可能不返回任何内容(void
)并让方法做造型。
所以我正在寻找关于如何处理这个问题的一些指导。
答案 0 :(得分:4)
我担心的是,我实际上正在制作UIActivityIndicatorView的第二个副本,这似乎是不必要的
不,你没有。您可能会因为从类别方法返回self而感到困惑,但这只是一个指针,而不是对象本身被复制。
但是,我会稍微改变一下:
- (void) addToSuperView:(UIView *) target {
[self startAnimating];
[self setHidden:NO];
self.frame = target.bounds;
self.backgroundColor = [UIColor colorWithRed:0.0f green:0.0f blue:0.0f alpha:0.6f];
[target addSubview:self];
}
这样,添加时你不需要额外的不必要的电话:
[loader addToSuperView:background];