2012-07-23 3 views
0

이 질문을 두 번째로 묻는 질문이지만 이번에는 좀 더 경험이 있으며 어쩌면 더 좋은 단어 일 수 있습니다.탭 내에서보기를 밀고 팝하는 TabView 앱

저는 3 개의 탭이있는 iPhone 응용 프로그램을 가지고 있으며, 위임자는 tabBarController를 가지고 있으며 각 탭의 화면에 나타나는 3 개의보기는 각각 "FirstViewController", "SecondViewController"및 "ThirdViewController"로 제어됩니다.

두 번째 및 세 번째보기가 모두 정렬됩니다.

바로 여기 내 질문이 있습니다. 첫 번째 탭에서 나는 각각의 IBOutlet 버튼과 첫 번째 뷰 컨트롤러의 메소드에 모두 연결된 20 개의 UIButton을 가지고 있습니다. 지금은 각 메소드가 화면에 모든 정보를 숨기고 있기 때문에 이론적으로는 눌렀을 때 텍스트 상자와 같은 정보를 숨김 해제 할 수 있지만 IB에서는 매우 혼란스러워집니다.

본질적으로 각 버튼을 누를 때마다 새로운 .xib 파일이있는 새로운 화면 /보기를 가져오고 싶습니다. 뒤로 버튼 (다른 UIButton)을 포함하여 모든 정보를 넣을 수 있습니다. 화면을 열고 tabA의 원래보기로 돌아갑니다.

어떻게 처리할까요?

새로운 .xib와 함께 제공되는 UIView 클래스를 만들어 보았습니다. 나는 그 중 한 가지 방법으로 3 줄의 코드를 설정했다. 기본적으로 .xib로 새보기를 설정 한 다음 서브보기로 추가했다. 이 잘 작동하고 앞으로 새 화면을 가져 왔지만이 특정 하위보기를 제거하지 못했습니다. 원래보기로 돌아갑니다.

도움 주셔서 감사합니다.

#import <UIKit/UIKit.h> 
#import "E87view.h" 

@interface FirstViewController : UIViewController { 

IBOutlet UIButton *E87, *E81, *F20, *E36, *E46, *E90, 
        *E34, *E39, *E60, *E63, *E64, *E38, 
*E65, *F01, *X3, *X5, *Z3, *Z4, *M3, *M5, *backButton; 

IBOutlet UILabel *ones, *threes, *fives, *sixs, *sevens, *xs, *zs, *ms; 

IBOutlet UITextView *mainText; 

} 

-(IBAction) E87Pressed; 
-(IBAction) E81Pressed; 
-(IBAction) F20Pressed; 
-(IBAction) E36Pressed; 
-(IBAction) E46Pressed; 
-(IBAction) E90Pressed; 
-(IBAction) E34Pressed; 
-(IBAction) E39Pressed; 
-(IBAction) E60Pressed; 
-(IBAction) E63Pressed; 
-(IBAction) E64Pressed; 
-(IBAction) E38Pressed; 
-(IBAction) E65Pressed; 
-(IBAction) F01Pressed; 
-(IBAction) X3Pressed; 
-(IBAction) X5Pressed; 
-(IBAction) Z3Pressed; 
-(IBAction) Z4Pressed; 
-(IBAction) M3Pressed; 
-(IBAction) M5Pressed; 
-(IBAction) backButtonPressed; 

-(void) hideAll; 
-(void) showAll; 

@end 

.m 파일. 숨기기 및 표시 방법의 숨겨진 요소에는 아무런주의를 기울이지 않습니다. 분명히 나는이 방법을 사용하고 싶지 않다. 나는 새로운 스크린을 밀고 팝하고 싶어한다. 내 탭 유지하기

#import "FirstViewController.h" 
#import "E87view.h" 


@implementation FirstViewController 


-(void) hideAll{ 
E87.hidden = 1; 
E81.hidden = 1; 
F20.hidden = 1; 
E36.hidden = 1; 
E46.hidden = 1; 
E90.hidden = 1; 
E34.hidden = 1; 
E39.hidden = 1; 
E60.hidden = 1; 
E63.hidden = 1; 
E64.hidden = 1; 
E38.hidden = 1; 
E65.hidden = 1; 
F01.hidden = 1; 
X3.hidden = 1; 
X5.hidden = 1; 
Z3.hidden = 1; 
Z4.hidden = 1; 
M3.hidden = 1; 
M5.hidden = 1; 
ones.hidden = 1; 
threes.hidden = 1; 
fives.hidden = 1; 
sixs.hidden = 1; 
sevens.hidden = 1; 
xs.hidden = 1; 
zs.hidden = 1; 
ms.hidden = 1; 
mainText.hidden = 1; 
backButton.hidden = 0; 
} 

-(void) showAll{ 
E87.hidden = 0; 
E81.hidden = 0; 
F20.hidden = 0; 
E36.hidden = 0; 
E46.hidden = 0; 
E90.hidden = 0; 
E34.hidden = 0; 
E39.hidden = 0; 
E60.hidden = 0; 
E63.hidden = 0; 
E64.hidden = 0; 
E38.hidden = 0; 
E65.hidden = 0; 
F01.hidden = 0; 
X3.hidden = 0; 
X5.hidden = 0; 
Z3.hidden = 0; 
Z4.hidden = 0; 
M3.hidden = 0; 
M5.hidden = 0; 
ones.hidden = 0; 
threes.hidden = 0; 
fives.hidden = 0; 
sixs.hidden = 0; 
sevens.hidden = 0; 
xs.hidden = 0; 
zs.hidden = 0; 
ms.hidden = 0; 
mainText.hidden = 0; 
} 

-(IBAction) backButtonPressed{ 
[self showAll]; 
backButton.hidden = 1; 
//[self.navigationController popToRootViewControllerAnimated:YES]; 

//for (UIView *subview in [self.view subviews]) { 

// [subview removeFromSuperview]; 
//} 
//[self showAll]; 


} 

-(IBAction) E87Pressed{ 
[self hideAll]; 
//E87view *e87view = [[E87view alloc] initWithNibName:@"E87view" bundle:[NSBundle mainBundle]]; 
//[self.navigationController pushViewController:e87view animated:YES]; 
//[self.view addSubview:e87view.view]; 
} 


// The designated initializer. Override to perform setup that is required before the view is loaded. 
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { 
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
if (self) { 
    // Custom initialization 
    [self showAll]; 
} 
[self showAll]; 
return self; 
} 



// Implement loadView to create a view hierarchy programmatically, without using a nib. 
- (void)loadView { 

[self showAll]; 
} 



// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. 
- (void)viewDidLoad { 
[super viewDidLoad]; 

//backButton.hidden = 1; 
[self showAll]; 
self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"BackdropService.png"]]; 
backButton.hidden = 1; 


} 


/* 
// Override to allow orientations other than the default portrait orientation. 
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation  { 
// Return YES for supported orientations 
return (interfaceOrientation == UIInterfaceOrientationPortrait); 
} 
*/ 

- (void)didReceiveMemoryWarning { 
// Releases the view if it doesn't have a superview. 
[super didReceiveMemoryWarning]; 

// Release any cached data, images, etc that aren't in use. 
} 

- (void)viewDidUnload { 
// Release any retained subviews of the main view. 
// e.g. self.myOutlet = nil; 
} 


- (void)dealloc { 
[super dealloc]; 
} 

@end 

물론 새로운 .h와 .m은 고유 한 .xib 파일이있는 E87view입니다.

[self.navigationController pushViewController:theButtonController animated:YES]; 

다음 탐색 모음에서 만들거나 탐색 모음을 제거하고 자신의 뒤로 버튼을 만들 뒤로 가기 (back) 버튼을 사용 : 당신은 UINavigationController 및 사용 FirstViewController을 포함 할 수 있습니다

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:  (NSDictionary *)launchOptions {  

// Override point for customization after application launch. 

// Add the tab bar controller's view to the window and display. 
[self.window addSubview:tabBarController.view]; 
[self.window makeKeyAndVisible]; 


return YES; 
} 

답변

0

다음을 사용 :

[self.navigationController popViewControllerAnimated:YES]; 

이 방법을 사용하면 탭이 맨 아래에 계속 유지됩니다. 당신이 현재 당신의 탭을 유지하는 걱정하지 않는 경우

은 당신이 사용할 수있는 modalViewController과 같이 : 다음이 완료되었을 때 다시 FirstViewController에 부를 것이다 theModalController의 프로토콜을 만들 것

[self presentModalViewController:theModalController animated:YES]; 

. 갈

[self dismissModalViewControllerAnimated:YES]; 

그래서 두 가지 방법으로 다음 FirstViewController 다음 theModalController을 닫으려면이 코드를 사용합니다.탭을 유지하고 viewController을 스택에 넣으려면 UINavigationController을 사용하십시오. 이 새로운 viewController을 사용할 때 탭 유지에 신경 쓰지 않는다면 위의 modalViewController을 사용할 수 있으며 전체 화면을 차지하게됩니다.

희망이 도움이됩니다.

편집 : 이것은 당신이 탐색 컨트롤러를 설정하는 방법, 당신은 그 후 당신의 AppDelegate.h

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:  (NSDictionary *)launchOptions {  

    self.tabBarController = [[[UITabBarController alloc] init]; 

    FirstViewController* vc1 = [[FirstViewController alloc] init]; 
    SecondViewController* vc2 = [[SecondViewController alloc] init]; 
    ThirdViewController* vc3 = [[ThirdViewController alloc] init]; 

    UINavigationController* navController = [[UINavigationController alloc] 
          initWithRootViewController:vc1]; 

    NSArray* controllers = [NSArray arrayWithObjects:navController, vc2, vc3, nil]; 
    tabBarController.viewControllers = controllers; 

    window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    window.rootViewController = tabBarController; 
    [window makeKeyAndVisible]; 

} 

#importviewControllers 각각에 대한 .h 파일이 필요합니다입니다, FirstViewController는 UINavigationController에 포함됩니다 위에 사용 된 팝 및 푸시 코드를 사용할 수 있습니다.

+0

오늘 밤 나중에 Skype에 올 수 있다고 생각하십니까? 말하자면, 2 시간? 오랫동안 우리를 데려가려는 노력은 "원숭이가보고 원숭이가하는"유형의 학습자입니다. 예를 들어, UINavigationController에 FirstViewController를 포함시킴으로써 무엇을 의미하는지 확신 할 수 없습니다. 인터페이스 파일에서 상속과 같은 종류를 추가 하시겠습니까? –

+0

스카이프에는 사용할 수 없지만 우연히 스토리 보드를 사용하고 있습니까? –

+0

아니, Xcode 3.2 롤을 사용하고 있습니다. 나중에 라이온을 구입했기 때문에 라이온을 구입하지 않았습니다. 내 MAC이 아닙니다. 그러나 코드를 포함하도록 게시물을 업데이트 했으므로 솔루션을 포함하여 코드를 다시 게시하려면 해당 코드가 포함되어야합니다. –

관련 문제