기본적으로 위임 프로토콜을 사용하는 UIView의 하위 클래스 (RRView)가 있습니다. RRView는 아웃렛을 통해 대리자 프로토콜뿐만 아니라 델리게이트를 구현하는 뷰 컨트롤러에 연결됩니다.위임 프로토콜/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 문은 기본적으로 모두 self.outletVars가 연결되어 있지 않기 때문에 if ([view isEqual : nil])입니다. 그렇다면 코드가 연결되기 전에 코드를 실행하는 문제가 있습니다 ('init :'vs'viewDidLoad') 또는 다른 이유가 있습니까? –
모든 것이 IB에서 이루어지기 때문에 그것은 오히려 질서의 문제입니다. 나는 콘센트를 연결할 때 초기화가 계층 구조를 따라 잡을 것이라고 생각한다. –