2012-06-12 6 views
0

IBAction은 아무 것도하지 않습니다. 콘솔에 "Back"을 기록하여 연결이 정상적으로 이루어집니다. IBAction를이 내가 여기에 너무 많은 가정을하고 있지 않다 희망왜이 하위보기가 제거되지 않습니까?

-(IBAction)loadSettingsView:(id)sender; 

{ 

    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { 
     [[NSBundle mainBundle] loadNibNamed:@"settingsView_iphone" owner:self options:nil]; 
    } else { 
     [[NSBundle mainBundle] loadNibNamed:@"settingsView_ipad" owner:self options:nil]; 
    } 
    [self.view addSubview:topView]; 
} 

-(IBAction)loadMainView:(id)sender; 
{ 
    [topView removeFromSuperview]; 
    NSLog(@"back"); 

} 
+0

무엇이 질문입니까? –

+0

'topView '란 무엇이며 어떻게 할당됩니까? –

+0

... IBAction은 어떤 작업을 수행하지 않습니까? – Daniel

답변

3

를 호출 할 때 self.topView는 아무것도하지 않는다,하지만이 문제를 해결해야한다. 나는 topView는 현재 클래스의 구성원 인 가정입니다 :

-(IBAction)loadSettingsView:(id)sender; 

{ 

    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { 
     topView = [[[NSBundle mainBundle] loadNibNamed:@"settingsView_iphone" owner:self options:nil] objectAtIndex:0]; 
    } else { 
     topView = [[[NSBundle mainBundle] loadNibNamed:@"settingsView_ipad" owner:self options:nil] objectAtIndex:0]; 
    } 
    [self.view addSubview:topView]; 
} 

-(IBAction)loadMainView:(id)sender; 
{ 
    [topView removeFromSuperview]; 
    NSLog(@"back"); 

} 

기본적으로 사용하는 loadNibNamed 방법은 펜촉의 모든 최상위 전망 배열을 반환합니다. 이러한 뷰에 대한 참조를 원한다면 (그리고 여기 펜촉에 하나의 뷰가 있다고 가정하고 있습니다.) 실제로 topView 변수를 할당해야합니다. 현재 topView은 아마도 nil이므로 removeFromSuperview 호출이 아무 것도하지 않습니다.

+1

... 그것은 topView를 할당하는 끔찍한 방법처럼 보입니다. IBOutlet을 사용하는 것이 좋습니다 .... – Daniel

+0

그건 의미가 있습니다. 그렇다면 어떻게 topView를 0으로 만들지 않을까요? – frankie

0

훨씬 쉬운 솔루션을 제공하십시오. 메인 뷰의 펜촉에 새 뷰를 작성하고 IBOutlet을 첨부합니다. 꿈처럼 작동합니다.

-(IBAction)loadSettingsView:(id)sender; 
{ 
     [self.view addSubview:settingsView]; 
} 

-(IBAction)loadMainView:(id)sender; 
{ 
    [settingsView removeFromSuperview]; 
} 
관련 문제