2012-08-07 3 views
-1

다른 버튼을 클릭하면 viewController (familyView) 버튼을 클릭 할 수 있습니다. familyView에는 다시 나를 mainViewController(ViewController.xib)으로 데려 오기위한 버튼이 있지만 기본 viewController를 호출하는 방법을 모르겠습니다.UIButton을 사용하여 다른 viewController간에 이동 하시겠습니까?

내 방법은 당신이 주요 ViewController을 호출하는 방법에 도움이 될 희망 familyView

UIViewController* familyView = [[UIViewController alloc] initWithNibName:@"familyView" bundle:[NSBundle mainBundle]]; 
[self.view addSubview:familyView.view]; 

를 호출? 같은 방법으로 호출해야합니까? 이 뜻은 다음과 같습니다.

UIViewController* mainView = [[UIViewController alloc] initWithNibName:@"viewController" bundle:[NSBundle mainBundle]]; 
[self.view addSubview:mainView.view]; 

그렇다면 더 좋은 방법이 있습니까? 내 데모 프로젝트에서 전 7 가지 뷰를 데이터로 가득 채우고 앞뒤로 이동하는 버튼을 만들려고합니다.

EDIT : UIView를 사용하면 해당 구현 및 인터페이스 파일과 함께 다른 viewController를 사용하는 대신 나에게 가장 적합합니까? 내 프로젝트에는보기가 있으며 각보기에는 다른 HTML 페이지에서 파싱 된 데이터가 있습니다.

+0

7 개의보기를 표시하려면 'UINavigationController' 또는'UIPageViewController '를보십시오. 아마도 도움이 될 것입니다. – matsr

+0

표시하는 데이터를 제외하고 각각 7 개의보기가 동일합니까? 이 데이터, 텍스트보기, 웹보기 등을 표시하기 위해 어떤 객체를 사용하고 있습니까? 또한 모든보기간에 앞뒤로 이동하거나 기본보기에서 다른보기로 이동 한 다음 다시 기본보기로 돌아가고 싶습니까? – rdelmar

+0

아직 구조를 결정하지 않았습니다. 데모 프로젝트이기 때문에 이동 중에도 배우고 구현하고 싶습니다. 주로 사용자는보기간에 이동하거나 앞뒤로 이동해야합니다. 나는 matsr이 제안한대로'UINavigationController'로 작업하기 시작했습니다. – Sobiaholic

답변

1

두 가지 방법을 사용할 수 있습니다. 귀하의 질문에서

  1. UINavigationController가
  2. 대표

을 UINavigationController가이 최선의 선택 것 같다하지만 난 당신이 모두 표시됩니다.


UINavigationController가

당신이 그렇게 같은 탐색 컨트롤러에 포장해야 할 것 앱 위임에서 mainViewController를로드 :

@property (strong, nonatomic) UINavigationController *navController; 

AppDelegate.h을

AppDelegate.m

didFinishLaunchingWithOptions에서
@synthesize navController = _navController; 

//은 :

UIViewController *mainViewController = [[MainViewController alloc] initWithNibName:@"MainViewController" bundle:nil]; 

navController = [[UINavigationController alloc] initWithRootViewController:mainViewController]; 

self.window.rootViewController = nav1; 
[self.window makeKeyAndVisible]; 

이제 MainViewController에 당신은이 UINavigationController가의 설득있다. 간단하게 할

ChildViewController *child = [[ChildViewController alloc]...]; 
[self.navigationController pushViewController:child animated:YES]; 

당신이 만약 당신의 ChildViewController에 다시 가고 싶어 : 당신이 부모로부터 아이를 밀어하려는 경우

당신은 간단하게 할 수있는

[self.navigationController popViewControllerAnimated:YES]; 

이가이다 "드릴 다운"기법.

는 (나는 "드릴 다운"단순히를보다 더 의미가 알고 있지만, 기준의 좋은 프레임을 제공합니다.)


위임을

지금 다른 방법 당신이 그 클래스 사이에 대리자를 설치하는 것입니다. 그래서 childView에 있고 부모에게 전화해야 할 경우, 그렇게 할 채널이 있습니다. 지금처럼 MainViewController.h 설정 그것에서

: 당신의 MainViewController.m에서

#import <UIKit/UIKit.h> 

//This is our delegate 
@protocol TalkToParentDelegate <NSObject> 

//This is our delegate method 
- (void)helloParent; 
@end 

@interface MainViewController : UIViewController <TalkToParentDelegate> 
... 
.. 
@end 

확실히 대리자 메서드를 추가합니다. 당신의 ChildViewController.h 설정에서

- (void)helloParent { 
    NSLog(@"Hello child, let me do something here"); 
} 

그것과 같이 :

#import <UIKit/UIKit.h> 

//Add header of class where protocol was defined 
#import "MainViewController.h" 

@interface ChildViewController : UIViewController 

//Create a property we can set to reference back to our parent 
@property (strong, nonatomic) id <TalkToParentDelegate> delegate; 

@end 

지금, 당신의 MainViewController.m에, 당신이 제시 할 때마다 ChildViewController이 작업을 수행 :

ChildViewController *child = [[ChildViewController alloc]...]; 

//Set the delegate reference to parent 
child.delegate = self; 

//present the view 

마지막으로 적어도 다음과 같이 부모 (MainViewController)의 메소드를 호출 할 수 있습니다.

[self.delegate helloParent];


그래서 다음 두 가지 방법을 사용할 수 있습니다.

그러나 나는 이것을 함께 사용할 수 있습니다. UINavigationController가 있지만 부모와 대화하기 위해 자식이 필요하다고 가정하면 가능하면 대리자를 설정할 수 있습니다.

  • 희망 사항.
+0

굉장한 !!! 정말 명확한 설명. 그렇게 해 주셔서 감사합니다. 한가지,'nav1.view'는 무엇입니까? 내일 제 코드로 돌아 가면 내일 당신의 설명을 따라하기 시작할 것입니다. – Sobiaholic

+0

죄송합니다. "nav1.view"대신 "nav1"이어야합니다. : P 변경 사항과 비슷하게 게시물을 수정했습니다. 다행스럽게 도울 수있었습니다! – random

+0

가이드를 따라 가십시오. 인터페이스 빌더에서 대부분을 할 수 있지만 프로그래밍 방식으로 실행하는 것은 정말 좋습니다. 시간과 답변을 주셔서 감사합니다. Cory :) – Sobiaholic

관련 문제