2010-02-12 3 views
3

iPhone에서 뷰 계층 구조 및 그림에 문제가 있습니다.iPhone보기 계층 구조 질문 : 탭 막대 위에 뷰를 그리려면 어떻게해야합니까?

구체적으로 말하면, UIPickerView 슬라이드가있는 특정 셀을 선택하고 싶은 테이블 뷰가있는 탭이있는 탭 막대 응용 프로그램이 있습니다. 슬라이딩은 실제로 문제가되지 않습니다 (또는 적어도 내가이 부분을 파악한 후에는 그렇지 않을 것이라고 가정합니다). 그러나 피커 (또는 다른 UIView)를 표시 할 수 없습니다. 탭 바.

이 특정 탭을 설정 한 방식이 문제 일 수 있다고 생각합니다.

[self.tabBarController.view addSubview:pickerView]; 

를 모든 것이 잘 작동 것 : 일반적으로, 다른 탭에, 난 그냥 같은 것을 할 수 있습니다.

하지만이 특정 탭에 대한 두 가지 다른 UITableViews간에 전환하는 탐색 모음에서 UISegmentedControl 있습니다. 따라서 탭과 연결된보기 컨트롤러 (TabViewController라고 함)에는이 두 테이블보기 컨트롤러 (TableOneViewController 및 TableTwoViewController)의 자체 인스턴스가 있고 TabViewController보기의 하위보기로 현재 선택된 테이블보기 (세그먼트 컨트롤 기반)가 삽입됩니다. 나는이 같은보기를 전환 할 필요하지 않은 경우

난 그냥 TabViewController에서

[tabViewController.tabBarController.view addSubview:pickerView]; 

를 호출 할 수 있고 피커는 탭 표시 줄에 걸쳐 표시됩니다. 하지만이 탭 내에서 선택된 테이블 뷰 컨트롤러 중 하나에서 호출 할 수 없다는 것이지요 (물론 할 수 있지만 아무 것도하지 않습니다). 이 tabBarController 속성을 테이블보기 컨트롤러에 전달하려고했지만 어느 쪽도 작동하지 않습니다. 나는 또한 응용 프로그램 대리인 (나는 피하려고 노력하고있다)을 아무 소용이없이 어지럽게 만들려고 노력했다.

여기에 누락 된 간단한 내용이 있습니까, 아니면 수행 할 수 있습니까? 키보드가이 테이블보기의 탭 표시 줄 위로 밀어 올 수 있기 때문에 필자는 그렇게 생각합니다. 현재의 모든 뷰와 하위 뷰를 그릴 수있는 방법이 있습니까? 여기

는 세그먼트 제어가 TabViewController.m 내에서 선택 될 때 호출 무엇이며, 뷰 전환 : 나는 TableOneViewController.m에 선택기를 추가하려고 할 때 무엇을 무슨 일이야 여기

- (IBAction)switchViews:(id)sender 
{ 
    if (self.tableOneViewController.view.superview == nil) 
    { 
     if (self.tableOneViewController == nil) 
     { 
      TableOneViewController *tempOneController = [[TableOneViewController alloc] initWithNibName:@"TableOneViewController" bundle:nil]; 
      self.tableOneViewController = tempOneController; 
      [tempOneController release]; 
     } 
     [tableTwoViewController.view removeFromSuperview]; 
     [self.view insertSubview:tableOneViewController.view atIndex:0]; 
    } 
    else 
    { 
     if (self.tableTwoViewController == nil) 
     { 
      TableTwoViewController * tempOneController = [[TableTwoViewController alloc] initWithNibName:@"TableTwoViewController" bundle:nil]; 
      self.tableTwoViewController = tempOneController; 
      [tempOneController release]; 
     } 
     [tableOneViewController.view removeFromSuperview]; 
     [self.view insertSubview:tableTwoViewController.view atIndex:0]; 
    } 
} 

과 :

UIPickerView *tempPicker = [[UIPickerView alloc] init]; 
tempPicker.delegate = self; 
tempPicker.dataSource = self; 
tempPicker.showsSelectionIndicator = YES; 
tempPicker.clipsToBounds = NO; // thought this might work, but doesn't 
self.picker = tempPicker; 
[tempPicker release]; 
[self.view addSubview:pickerPicker]; // adds beneath tab bar! 

답변

7
[[[UIApplication sharedApplication] keyWindow] addSubview:someViewController]; 

로드중인 viewController가 480px 높이인지 확인하십시오.

다시 제거 I 전체 게시물을 통해 읽어 보지 않았 [someViewController removeFromSuperview];

+0

이것은 내가 찾고 있었던 것이다. 제안 해 주셔서 감사합니다. 나는 내 게시물이 가장 적은 것을 말하면서 길다는 것을 안다. 그 솔루션은 믿을 수 없을만큼 단순한 인물! – Kevin

+0

간단한 애니메이션을 추가하여 방금 나타나지 않도록 할 수도 있습니다. :) – Emil

2

아마 당신은

[tabBarController presentModalViewController:someViewController animated:YES]; 

을하고 싶지?

화면의 다른 항목 위로 이동해야합니다.

+0

를 사용 ...하지만 야누스 '대답은 당신이 제안 –

+0

감사를 원하는 아마도합니다. 이 옵션은 내 마음을 통해 실행되었지만 작동시키지 못했습니다. 비록 내가 잘못하고있는 작은 일 이었을지도 모른다. .. – Kevin

+0

presentModalViewController는 표준 쉬운 호출이며 다른 것들 위에 물건을 표시하는 데 권장되는 방법입니다. – Jaanus