2014-07-04 4 views
0

오늘 신사 숙녀 여러분, 제정신의 모습을 거의 잃어 버렸습니다. Interface Builder는 그것을 제거하려고합니다. 저는 iOS 개발자의 새로운 기능으로 모든 종류의 다양한 작업으로 책을 읽습니다. 내가하려고하는 것은 두 번 탭을 사용하여보기를 호출하는 것입니다. 이것은 제스처 인식기 및 도청에 관한 것이 아니라 순전히 콘센트에 관한 것입니다.Interface Builder에서 UIView 콘센트 만들기

1) 작은 메뉴가 그려지는 xib 파일이 있습니다. 2) 두 번 탭하면 제게이 메뉴가 나타납니다.

- (void)displayPanel:(UIGestureRecognizer *)gesture{ 
    CGRect frame = CGRectMake(0, self.window.frame.size.height-100, self.window.frame.size.width, 90); 
    NSArray *nibContents = [[NSBundle mainBundle] loadNibNamed:@"colorMenuView" owner:self options:nil]; 
    UIView *colorView = [nibContents lastObject]; 
    [colorView setFrame:frame]; 
    [self.window addSubview:colorView]; 
    [self.window setNeedsDisplay]; 
    } 

좋은 작은 메뉴가 하단에 그려진 :

이것은 나를 위해 일하는 내가 그것을 가지고 방법입니다.

그러나 나는 이것을 NSBundle의 마지막 객체로하지 않으려 고합니다. 좋은 접근 방법이라고 생각하지 않습니다. 내 메뉴를 보유하고 UIView에 콘센트 연결을 만들어 이것을하고 싶습니다.

(I 일부 사진을 게시 한 것입니다하지만 난 아직 충분히 명성을 가지고하지 않은 경우) 내가, 콘센트

을 강조되지 수없는 연결을하려고하면

를 I 보기의 클래스를 UIView에서 CustomView으로 변경합니다. 레이블 및 버튼과 같은 하위 뷰를 연결하여 작동하는 것처럼 보입니다. 나는 여전히보기를 연결할 수 없습니다.

이제 IB에 다른 표준보기를 추가합니다. 그리고 연결을 시도하십시오. 그것은 작동합니다! 그리고 사용자 정의보기에 연결하려고하면 그렇지 않습니다.

이제 사용자 정의보기가 다시 표준으로 변경되었습니다. 어느보기도 연결할 수 없습니다.

확인보기 중 하나를 사용자 지정으로 변경하고 다른보기를 연결할 수 있습니다. 그것은 작동합니다.

는의 현재 메뉴를 호출하는 또 다른 방법의 구현을하자 :

- (void)displayPanel:(UIGestureRecognizer *)gesture{ 
CGRect frame = CGRectMake(0, self.window.frame.size.height-100, self.window.frame.size.width, 90); 
[[NSBundle mainBundle] loadNibNamed:@"colorMenuView" owner:self options:nil]; 
UIView *menu = self.menuView; // the outlet 
self.menuView.frame = frame; 
[self.window addSubview:menu]; 
[self.window setNeedsDisplay]; 
} 

나는 위의 덩어리에 대한 오류가 없습니다. 그러나 메뉴는 여전히 표시되지 않습니다. 그리고 그것은 사실상 시작되지 않았습니다.

2 가지를 이해하도록 도와주세요. 1) IB가하는 일을 왜하는지? 2) 내가 마침내 연결 한 메뉴가 왜 0입니까?

답변

0

owner 매개 변수 loadNibNamedself으로 설정했지만 xib 파일에 File's owner 자리 표시자를 올바르게 구성하지 않은 것처럼 보입니다. 이 결과는 아 웃 아웃렛 참조가됩니다.

colorMenuView xib의 자리 표시자를 특정 클래스의 인스턴스로 설정해야합니다 (예 : File's owner). ColorMenuViewController (신원 검사기 사용). 이렇게하면 사용 된보기 컨트롤러의 콘센트 view을 최상위보기와 연결할 수 있습니다.이보기는 다음 다음 방법 중 하나를 사용하여로드 할 수 있습니다

// 1 
ColorMenuViewController* vc = [[ColorMenuViewController alloc] initWithNibName:@"colorMenuView" bundle:[NSBundle mainBundle]]; 
UIView* colorView = vc.view; 

// 2 
ColorMenuViewController* vc = [ColorMenuViewController new]; 
[[NSBundle mainBundle] loadNibNamed:@"colorMenuView" owner:vc options:nil]; 
UIView* colorView = vc.view; 

제스처 인식기 작업을 구현 귀하의 기본 클래스는,뿐만 아니라 File's owner로 사용할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 나는 다른 ViewController를 만드는 것에 대해 생각해 봤는데 나는 그렇게 할 수 있어야한다고 생각한다. 하지만 뷰 컨트롤러 없이도 가능하다고 생각하십니까? UIView를 호출하는 CustomView? – Andrey

관련 문제