1

와우, 나는이 질문에 큰 생각을했습니다!스토리 보드의 하위 뷰 (다른보기 컨트롤러) 내의 버튼에서 새보기 컨트롤러를 밀어 넣을 수 있습니까

그래서 다른 뷰 컨트롤러 (메인 VC) 내에 "ContentView"라는 뷰 컨트롤러가 있습니다. 메인 VC에는 스토리 보드를 사용하여 생성 된 탐색 컨트롤러가 있습니다. 그리고 contentView는 Segmented Control의 옵션에 따라 3 개의 다른 뷰 컨트롤러 (vc1, vc2 및 vc3)를로드합니다. 이제 질문은 다음과 같습니다.

사용자가 세그먼트 컨트롤에서 옵션을 선택하면 나타나는 하위 뷰 (vc2) 중 하나의 단추에서 새보기 컨트롤러를로드하려면 어떻게해야합니까? 내 스토리 보드에서 볼 뷰 컨트롤러 (VC2)가 있지만 탐색 컨트롤러는 메인 VC에 있기 때문에

  1. 은, 분명히 나는 ​​VC2 '파일의 소유자로 버튼에 동작을 연결할 수 없습니다.

  2. 나는 다음과 같은 코드로 접근을 시도 :

    AppDelegate *del = (AppDelegate *)[UIApplication sharedApplication].delegate; 
    UINavigationController *navigationController =  (UINavigationController*)del.window.rootViewController; 
    DetalleMisMarcas *detalleMarcas = [[DetalleMisMarcas alloc] initWithNibName:@"DetalleMarcas" bundle:nil]; 
    
    [navigationController pushViewController:detalleMarcas animated:YES]; 
    

그러나 그것은 작동하지 않습니다.

나는이 포럼에서 해결책을 찾으려고 노력했지만 운이 없었습니다. 대부분 Xcode 4.2에는없는 메인 윈도우가 있다고 생각합니다.

마지막으로, 나는 3 파단로드 방법은 여기에 있습니다 :

-(IBAction)segmentCtrlChanged:(id)sender { 
UISegmentedControl *seg = sender; 
if (seg.selectedSegmentIndex == 0) 
{ 

    MMViewController *mm= [self.storyboard instantiateViewControllerWithIdentifier:@"MMView"]; 
    mm.view.frame = CGRectMake(0, 0, 320, 240); 
    [contentView addSubview:mm.view]; 

} 

else if (seg.selectedSegmentIndex == 1) { 
    MPViewController *mp = [self.storyboard instantiateViewControllerWithIdentifier:@"MPView"]; 
    mp.view.frame = CGRectMake(0, 0, 320, 240); 
    [contentView addSubview:mp.view]; 

    } 
} 

-(IBAction)mainSubView:(id)sender 
{ 
MMViewController *mm = [[MMViewController alloc] initWithNibName:@"MTView" bundle:nil]; 
[contentView addSubview:theMTView]; 
mm.view.frame = CGRectMake(0, 0, 320, 240); 

} 

어떤 아이디어?

답변

0

편집 : 귀하의 의견에 따라 대표자가 더 잘 작동 할 것입니다. 이것이 당신이 그것을 구현할 수있는 방법입니다. 대리인

// in the header file 
@property (weak, nonatomic) id <ContentViewControllerDelegate> delegate; 
@protocol ContentViewControllerDelegate <NSObject> 
- (void)contentViewDidSelectAView:(UIView *)view; 
@end 

// in the implementation 
- (IBAction)segmentCtrlChanged:(UISegmentedControl *)sender { 
case 0: 
    [self.delegate contentViewDidSelectAView:[[self.storyboard instantiateViewControllerWithIdentifier:@"MMView"] view]; 
    break; 
// and the rest of the code 
} 

// in MainView header file 
@interface MainViewController : UIViewController <ContentViewControllerDelegate> 

// in MainView implementation 
- (void)contentViewDidSelectAView:(UIView *)view { 
[self.view addSubView:view]; 
} 

실제로 위의 코드를 구현하지 않은 추가의가있는 contentView 컨트롤러 클래스에 있다고 가정 해 봅시다. 그러나 이것이 컨트롤러가 부모와 대화하는 방법이어야한다고 생각합니다. 희망이 도움이됩니다.


나는 당신이 일을 정확히 모르겠습니다 만의 당신이 루트에서 UINavigationController가 있다고 가정 해 봅시다, 그리고 mainViewController는 관계로 SEGUE를 통해 연결되어 있습니다. 구현 한대로 mainVC의 segmentedControl은 valueChange 이벤트로 -(IBAction)segmentCtrlChanged:(id)sender에 연결되어야합니다. 이 방법 당신은 그들이 작동하지만이 같은, 오히려 경우에 사용하는 대신 인덱스를 전환 할 수 있습니다, 당신은 또한 id 대신 UISegmentedControl *을 사용할 수 있습니다에서 :

-(IBAction)segmentCtrlChanged:(UISegmentedControl *)sender { 
switch(sender.selectedSegmentIndex) { 
case 0: { 
     MMViewController *mm= [self.storyboard instantiateViewControllerWithIdentifier:@"MMView"]; 
     [self.navigationController pushViewController:mm animated:YES]; 
     break; 
     } 

case 1: { 
     MPViewController *mp = [self.storyboard instantiateViewControllerWithIdentifier:@"MPView"]; 
     [self.navigationController pushViewController:mp animated:YES]; 
     break; 
    } 
case 2: { 
     // similar to above 
     break; 
    } 
default: 
    break; 

} 

VC1, VC2 및 VC3 - UIViewController의 인스턴스라고 가정합니다. 따라서 클래스가 링크되어 있고 식별자가 올바르게 설정되어 있는지 확인하십시오. 그리고 나서, 당신이 그들에게 개별적으로 어떤 segue도 만들지 않을 것이기 때문에, 그대로있는 그대로 두십시오. 그들은 코드를 통해 스택으로 푸시됩니다.

희망이 있습니다.

+0

감사하지만 문제는 viewView (vc1, vc2 및 vc3)를 contentView라는 다른보기에서로드하는 데 문제가 없다는 것입니다. contentView는 기본보기의 모든보기를 고유 한 V C로 차지하지 않으며보기의 맨 아래 부분만을 차지합니다. 문제는 각보기 컨트롤러 (vc1, vc2 및 vc3)의 컨트롤이 기본보기의 하위보기 인 contentView 안에 있다는 것입니다. 그래서 내가하고 싶은 일은 새로운보기 컨트롤러를 기본보기로 밀어 넣는 것이지만 다른보기 컨트롤러에있는 다른보기 컨트롤러 (vc1 또는 vc2 또는 vc3)가있는보기에서 기본보기로 이동하는 것입니다. – naSh

+0

죄송합니다. 정확히 무엇을 하려는지 명확하지 않았습니다. 이 경우 대리자 생성, MainView에 서브 뷰에 추가 할 것을 알려주려고 했습니까? 그게 효과가있을 수 있습니다. – Canopus

관련 문제