2010-02-23 3 views
1

많은 다른 상황에서 동일한 버튼 그룹을 포함하는 앱을 만들고 있습니다. 버튼은 각 컨텍스트의 다른 객체에 액션을 보냅니다. 단추를 포함하는 IB에서 단일 NSView를 디자인하고 링크를 유지하면서 변경 사항을 전파하면서 내 닙의 여러 위치에 해당보기의 복사본을 넣을 수 있어야합니다. 해당 인스턴스 각각을 다른 객체에 연결하고 버튼이 부모 뷰가 연결된 객체에 액션을 보내도록하고 싶습니다.IB에서 설계된 인터페이스의 재사용 가능한 비트

NSView의 서브 클래스를 생성 할 때,로드 될 때 nib 파일에서로드 된 다른 뷰로 자체를 대체하고 파일의 소유자로 연결된 객체를 설정한다고 생각했지만 이것이 가장 깨끗한 방법이라고 확신하지는 않습니다. 여기에 그 아이디어를 구현 한 것입니다 (작업중 인 경우) :

@implementation AVNViewFromNib 

- (void)awakeFromNib 
{ 
    //Load the nib whose name is specified by the "nibFile" key 
    NSNib* viewNib = [[NSNib alloc] initWithNibNamed:[self valueForKey:@"nibFile"] bundle:[NSBundle mainBundle]]; 
    NSMutableArray* topLevelObjects = [NSMutableArray new]; 
    [viewNib instantiateNibWithOwner:relatedObject topLevelObjects:&topLevelObjects]; 

    //Find our replacement view in that nib 
    for (id currentObject in topLevelObjects) 
    { 
     if ([currentObject isKindOfClass:NSClassFromString(@"AVNReplacementView")]) 
     { 
      representedView = currentObject; 
      break; 
     } 
    } 

    //Copy appropriate properties from us to our representedView 
    [representedView setAutoresizingMask:[self autoresizingMask]]; 
    [representedView setFrame:[self frame]]; 
    [[self superview] addSubview:representedView]; 

    //We were never here. :) 
    [self removeFromSuperview]; 
    [viewNib autorelease]; 
} 

@end 

@implementation AVNReplacementView 
@end 

가장 깨끗한 방법은 무엇입니까? 이 문제를 해결하기위한 표준 방법이 있습니까?

답변

1

IB에서 단추가있는보기를 만든 다음 해당보기를 라이브러리 창으로 끌어서 저장할 수 있습니다. 캐치는 그들 사이에 "링크"가 없다는 것입니다. 하나를 편집해도 다른 것들은 바뀌지 않습니다.

원한다면 대신 NSView의 하위 클래스를 만들어야합니다.

내가 파일의 소유자로 연결된 개체를 설정,로드 될 때, 그것은 코코아 콩 파일에서로드 다른 관점 자체를 대체 NSView의의 서브 클래스를 만드는 생각했지만, 나는 이것이 가장 깨끗한입니다 확신 아니에요 방법.

그럴 수 있습니다. 나는 그것이 정말로 더러운 모든 것이라고 생각하지 않는다. 이유는 init 메서드가 반환하는 개체는 명시 적으로 다른 개체를 반환 할 수 있다는 것입니다. 그러나로드 된 뷰에는 펜촉에있는 프레임이 있으므로 다른 프레임의 뷰를 처리하는 방법을 잘 모르겠습니다.

또 다른 방법으로 펜촉에서 버튼을로드하는 것이지만 하위 프레임으로 추가하기 전에 프레임을 조정해야합니다.

+0

링크를 유지하지 않는 불쾌한 (그러나 그것에 대해 어떻게 생각하십니까). 그러나 단지 굉장한 팁! 고마워요 피터! – bladnman