2013-07-20 5 views
0

이 질문은 이상하게 들리지만, 내가하려고하는 것을 설명해 드리겠습니다.여러 개의 탭에 대해 동일한 [스토리 보드]보기를 사용하고 선택한 탭에 따라 작은 것들만 변경하는 방법? (iOS)

각기 다른보기가있는 2 개의 탭이있는 앱이 있다고 가정 해 보겠습니다. 두 뷰는 거의 똑같습니다. 단 하나의 뷰에 다른 뷰가없는 버튼이 있거나 둘 중 하나가 포함되어 있지 않은 경우는 예외입니다.

스토리 보드 모드에서 이미 하나의보기를 만들었으니 이제는 조금 더 조금 바꿔서 다른 탭에 동일한보기를 재사용하고 싶습니다.

깊은 복사본을 만들고 싶지 않습니다. 하나를 변경하면 다른 복사본을 변경해야하며 둘 사이의 불일치가 발생할 수 있습니다.

그렇다면 여러 개의 탭에 대해 동일한 일반보기를 사용하고 어떤 탭에 따라 약간의 사항을 변경해야합니까?

스토리 보드보기에 범용 콘텐츠를 추가 한 다음 프로그래밍 방식으로 특정 탭 전용 콘텐츠를 추가해야합니까? 이 작업을 수행하면 어떤 탭이 선택되었는지 감지 할 수있는 방법이 필요합니다. 맞습니까? 할 수있는 방법이 있습니까 ?

의견을 보내 주셔서 감사합니다.

답변

1

스토리 보드가 필요하지 않습니다. 물론 거기에있는보기를 드래그하여 특정 클래스에 할당하고 그 안에있는 모든 것을 프로그래밍 할 수 있습니다. 그러나 실제로 스토리 보드 하나만 필요하면 스토리 보드는 쓸모가 없습니다. 뭔가를 변경하려면 서브 뷰를 프로그래밍 방식으로 처리해야합니다. 이것은 매우 좋으며 훌륭한 기능을 가지고 있습니다.

UITabBarController에서 어떤 탭을 선택했는지 확인하려면 self.tabBarController.selectedIndex을 사용하고 선택한 Tab의 지정된 색인과 비교할 수 있습니다.

편집 :

우리는 당신이 인덱스 0 탭에 녹색 버튼을 가정하고, 같은 버튼 위에 조금 밀어해야하고 빨간색 버튼이 녹색 버튼을 표시 할 경우 탭 인덱스 1 도청됩니다.

UIButton *greenButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 320, 100, 20)]; 
    greenButton.backgroundColor = [UIColor greenColor]; 
    [self.view addSubview:greenButton]; 


    UIButton *redButton = [[UIButton alloc] initWithFrame:CGRectMake(0, greenButton.frame.origin.y, 100, 20)]; 
    greenButton.backgroundColor = [UIColor redColor]; 

    if (self.tabBarController.selectedIndex == 1) { 
     [UIView animateWithDuration:1.0 animations:^{ 
      greenButton.frame = CGRectMake(0, 300, 100, 20); 
     } completion:^(BOOL finished) { 
      [self.view addSubview:redButton]; 
     }]; 
    } 

먼저 두 개의 버튼을 만들고보기에 녹색 하나를 추가하십시오. 첫 번째보기는 인덱스 0에 있습니다. 그런 다음 selectedIndex가 1인지 확인하고 버튼 주위에 애니메이션을 적용합니다.

+0

내 실제 앱의 조회수는 약 10-15 회이며 두 가지 조회수가 있다고 말하면서 복잡해 보이지 않았습니다. Storyboard 뷰를 사용하여 만들었습니다. 무언가를 바꿀 때마다 다시 컴파일하는 데 시간이 많이 걸리고 영원히 필요하기 때문입니다. 그러나 그것은 내가 묻는 것입니다 : 선택한 탭에 따라 하위 뷰를 프로그래밍 방식으로 변경하려면 어떻게해야합니까? 그게 가능하니? – giant91

+0

아, 고마워요! 방금 편집을 보았습니다. 'self.tabBarController.selectedIndex'+1 +1 – giant91

+0

하위 뷰에 프로그래밍 방식으로 애니메이션을 적용하려면 위 편집을 참조하십시오. – Sebastian