2013-03-01 1 views
0

모든 기능이있는 xib가있는 창 컨트롤러에서 파생 된 클래스가 있습니다. 이 xib에는 홀 목록을 표시하는 tableview가 있습니다. 홀 이름을 두 번 클릭하면 해당 홀의 기능을 표시하는 팝 오버가 생깁니다. 내가보기 컨트롤러 내가 프로그래밍 방식을 통해 팝업을 만들 ILK 것이다 클래스, 내 창 컨트롤러 클래스에서NSPopOver 표시

NSPopover *popover; 
NSViewController *popoverViewController; 

-(void)displayPopover{ 
    popover = [[NSPopover alloc] init]; 
    [popover setBehavior: NSPopoverBehaviorApplicationDefined]; 
    [popover setDelegate: self]; 
    popoverViewController = [[CHBPopover alloc] initWithNibName: @"MYViewController" bundle: nil]; 
    [popover setContentViewController: popoverViewController]; 
    [popover setContentSize: popoverViewController.view.frame.size]; 

    [popover showRelativeToRect: NSMakeRect(700, 400, 5, 5) 
         ofView: [[NSApp keyWindow] contentView] 
        preferredEdge: NSMaxXEdge]; 
} 

을 가지고, 나는 것을 어떻게하는 방법처럼,

-(IBAction)featuresDisplay:(id)sender{ 

    if([_hallNamesList selectedRow] == -1){ 
     [self setFeaturesList:nil]; 
    } 
    else { 

     //[self.hallFeaturesPopOver showRelativeToRect:[_hallNamesList frameOfCellAtColumn:0 row:[_hallNamesList selectedRow]] ofView:_hallNamesList preferredEdge:NSMaxXEdge]; 
     // [pop.displayPopover ]; 
     NSDictionary *hallFeaturesDictionary; 
     hallFeaturesDictionary = [_hallNames objectAtIndex:[_hallNamesList selectedRow]]; 
     _hallId=[hallFeaturesDictionary valueForKey:@"hallId"]; 
     [officeDetails setHallName:[hallFeaturesDictionary valueForKey:@"hallName"]]; 

     _featuresList=[conferenceHall getConferenceHallFeaturesWithDetails:officeDetails]; 
     NSLog(@"features list=%@",_featuresList); 
     [self setFeaturesList:[conferenceHall getConferenceHallFeaturesWithDetails:officeDetails]]; 
    } 
} 

를 호출을드립니다 이 IBAction의 popover 메소드? 행을 두 번 클릭하고 팝을 표시해야합니다. 어떻게해야합니까? 감사.

+0

그냥 '[self displayPopover]'가 팝업을 표시 할 위치를 전달하지 않습니까? – trojanfoe

+0

http://stackoverflow.com/questions/tagged/nspopover이 링크는 반드시 당신을 화나게 할 것입니다. nspopover에 대한 도움이 없습니다. 이유는 osx에서 매우 적습니다. –

+0

예. 나는 [self displayPopover]로 시도했다. 하지만 표시되지 않았습니다. – user2118335

답변

1

디스플레이 좌표가 매우 어둡게 보입니다. popover의 직사각형은 ofView 매개 변수를 기준으로합니다. 여기서 (0, 0)으로 시작하십시오. 그러면 keywindow.contentView의 왼쪽 상단 모서리에 팝업 표시가 표시됩니다. 그런 다음 위치를 미세 조정하십시오. IBAction의 실제 사각형 (아마도 테이블 셀 범위)을 전달해야 할 것입니다. popover에 대한 view rect의 크기 부분은 popover가 상대적으로 움직이기 때문에 중요합니다. 나는 또한 popover를 첨부하기 위해 뷰를 전달할 것이다. 때때로 당신이 그것을 클릭 할 때 뷰가 키가되지 않기 때문이다.

팝업 창에 대한 대리인은 부동 창으로 분리를 구현하려는 경우에만 필요합니다. 행동을 실험 해보십시오. NSPopoverBehaviorTransient로 시작하십시오. 난 당신이 실제로 응용 프로그램과 정의 된 동작을해야할지 모르겠지만 적어도 일시적인 동작으로 그것은 나를 위해 잘 작동합니다.

마지막으로 표시 할 때마다 팝업을 다시 만들 필요가 없습니다. awakeFromNib에서 설정 한 다음 필요할 때마다 showRelativeToRect...으로 전화하십시오. 일시적인 동작으로 자동으로 사라집니다.