我基本上有一个委托协议的UIView的子类(RRView)。 RRViews通过网点连接到实现代表协议的代表的视图控制器以及代表。委托协议/ IBOutlet
,我要求额外信息的委托的代码实现这样。
- (void)setDelegate:(id<RRViewDelegate>)delegate {
if (_delegate != delegate) {
_delegate = delegate;
if (_delegate && [_delegate respondsToSelector:@selector(cornersForRRView:)]) {
self.corners = [_delegate cornersForRRView:self];
}
if (_delegate && [_delegate respondsToSelector:@selector(cornerRadiusForRRView:)]) {
CGFloat maxRadius = floorf(self.bounds.size.height/2);
CGFloat radius = [_delegate cornerRadiusForRRView:self];
self.cornerRadius = MIN(radius, maxRadius);
}
if (_delegate && [_delegate respondsToSelector:@selector(rotationTypeForRRView:)]) {
self.type = [_delegate rotationTypeForRRView:self];
}
if (_delegate && [_delegate respondsToSelector:@selector(fontSizeForRRView:)]) {
self.fontSize = [_delegate fontSizeForRRView:self];
self.textFont = [UIFont fontWithName:self.textFont.fontName size:self.fontSize];
}
}
}
我面对的问题是我有一堆RRViews,所以我试图区分它们,但是网点还没有连接。
- (UIRectCorner)cornersForRRView:(RRView *)view {
if ([view isEqual:self.dimensionsInfoView]) {
return UIRectCornerTopLeft | UIRectCornerTopRight;
}
else if ([view isEqual:self.oneHundredPercentInfoView]) {
return UIRectCornerTopRight;
}
else if ([view isEqual:self.deviceApperanceInfoView]) {
return UIRectCornerTopLeft;
}
else {
return 0;
}
}
有另一种方式来做到这一点?
所以,问题是,在你的委托回调方法,在if语句基本上都是'如果([查看isEqual:方法无])'因为self.outletVars没有连接?如果是这样的话,那么它在连接之前运行代码(比如'init:'vs'viewDidLoad')还是其他原因? – 2013-03-19 08:08:03
因为一切都是在IB完成的,所以它是一个有序的问题。我猜(对我来说这听起来很合逻辑)初始化在连接插座时走向层次结构。 – 2013-03-19 10:52:24