我基本上有一個委託協議的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