2012-01-06 4 views
1

정보창을 누르면 작성된 modalViewController보기를 표시하기 위해 주 창에 있습니다. 하지만 주 창에서 정보 버튼을 누르면 아무 일도 일어나지 않습니다. 내가 다음 코드 한 mainviewcontroller.h 파일에서 프로그래밍 방식으로 UIToolbar에서 눌렀을 때 정보 단추 용 Modalviewcontroller 표시

: 다음 코드 한

#import "imageviewViewController.h" 
#import "Infoviewcontroller.h" 


@implementation imageviewViewController 

@synthesize toolbar; 
@synthesize currentSystemItem; 
@synthesize audioPlayer; 

UIBarButtonItem *infoItem = [[UIBarButtonItem alloc] 
          initWithTitle:@"Info" 
          style:UIBarButtonItemStyleBordered 
          target:nil 
          action:@selector(Infobuttonpressed)]; 

    // flex item used to put space in between buttons 

    UIBarButtonItem *flexItem = [[UIBarButtonItem alloc] 
          initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace 
          target:nil 
          action:nil]; 

    //Add buttons to the array 

    NSArray *toolbarItems = [NSArray arrayWithObjects: settingsButton, flexItem, systemItem, flexItem, systemItem1,flexItem, systemItem2, flexItem, systemItem3, flexItem, infoItem, nil]; 

    [toolbar setItems:toolbarItems]; 

    [settingsButton release]; 
    [systemItem release]; 
    [systemItem1 release]; 
    [systemItem2 release]; 
    [systemItem3 release]; 
    [infoItem release]; 
    [flexItem release]; 

[super viewDidLoad]; 

} 


- (void) Infobuttonpressed: (id) sender 
{ 
Infoviewcontroller *myView = [[Infoviewcontroller alloc] init]; 
[self presentModalViewController:myView animated:YES]; // present view modally 
[self.navigationController pushViewController:myView animated:YES]; // add to navigation stack 
[myView release]; 
} 

Infoviewcontroller.h 파일에서 : 다음 mainviewcontroller.m 파일에서

#import <UIKit/UIKit.h> 
#import <AVFoundation/AVFoundation.h> 

@interface imageviewViewController : UIViewController{ 
AVAudioPlayer *audioPlayer; 
} 

@property (nonatomic, retain) UIToolbar *toolbar; 
@property (nonatomic, assign) UIBarButtonSystemItem currentSystemItem; 
@property (nonatomic, retain) AVAudioPlayer *audioPlayer; 

@end 

코드를 다음 한

#import <UIKit/UIKit.h> 

@interface Infoviewcontroller : UIViewController <UITextViewDelegate> 

{ 

UITextView *textView; 

} 

@property (nonatomic, retain) UITextView *textView; 
@property (nonatomic, assign) UINavigationBar *navBar; 


@end 

다음 infoviewcontroller.m 파일에는 다음 코드가 있습니다.

#import "Infoviewcontroller.h" 

@implementation Infoviewcontroller 

@synthesize textView; 
@synthesize navBar; 



-(void)dealloc 
{ 
[textView release]; 
    [navBar release]; 
[super dealloc]; 
} 

-(void)setupTextView 
    { 
self.textView = [[[UITextView alloc] initWithFrame:self.view.frame] autorelease]; 

self.textView.textColor = [UIColor redColor]; 

self.textView.font = [UIFont fontWithName:@"System Bold" size:13]; 

self.textView.delegate = self; 

self.textView.backgroundColor = [UIColor whiteColor]; 

self.textView.textAlignment = UITextAlignmentCenter; 

self.textView.text = @"This is UITextView\nThis is UITextView\nThis is UITextView\nThis is UITextView"; 

[self.view addSubview: self.textView];  

} 

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 

navBar = [[UINavigationBar alloc] init]; 
UINavigationItem *navItem = [[[UINavigationItem alloc] initWithTitle:@"ModalViewControllerTest"] autorelease]; 
UIBarButtonItem *done = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(dismissView:)] autorelease]; 
navItem.rightBarButtonItem = done; 
navBar.items = [NSArray arrayWithObject:navItem]; 
[self.view addSubview:navBar]; 
} 
+0

info view 컨트롤러에 nib 파일이 있습니까? 아니면 코드로 모두 빌드하고 있습니까? – jrturton

+0

프로그래밍 방식으로 수행하고 있습니다 – user1120133

+0

그리고 중단 점을 사용하여 얼마나 멀리 있는지 확인 했습니까? 액션 메소드가 실행 되었습니까? 컨트롤러의 어떤 메소드가 실행됩니까? – jrturton

답변

1
UIBarButtonItem *infoItem = [[UIBarButtonItem alloc] 
          initWithTitle:@"Info" 
          style:UIBarButtonItemStyleBordered 
          target:nil 
          action:@selector(Infobuttonpressed)]; 

을해야 하는가? 첫째, 목표물이 누락되었습니다 (self이 아니라 nil이어야 함). 둘째, 셀렉터 끝에있는 콜론이 서명의 일부이므로 누락되었으므로 메서드 (예 : InfoButtonPressed:(id)sender)가 호출되지 않았습니다.

제쳐두고, 메서드는 소문자로 시작해야합니다.

0

당신은 pushModalViewController 및과 pushViewController

귀하의 의견이 이미 작동 자체에 UINavigationController가 pushModalViewController의 인스턴스 내에서 제어하는 ​​가정

둘 다 필요 없어요.

편집 - pushViewController에 대한 참조를 제거하십시오. 이제 작동합니까?

UIBarButtonItem *infoItem = [[UIBarButtonItem alloc] 
          initWithTitle:@"Info" 
          style:UIBarButtonItemStyleBordered 
          target:self 
          action:@selector(Infobuttonpressed:)]; 

스팟 차이

-(void) Infobuttonpressed: (id) sender; 
{ Infoviewcontroller *myView = [[Infoviewcontroller alloc] init]; 
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:myView]; 
UIViewController *pushController = [[UIViewController alloc] init]; 
[self addSubview:pushController.view]; 
[pushController presentModalViewController:navController animated:YES]; 
[myView release]; 
} 
+0

나는 당신을 못 보내고있다. 더 자세히 설명 할 수 있다면. 나는 그것을 감사 할 것이다. 도움을 주셔서 감사합니다. – user1120133

+0

도움 주셔서 감사합니다. 하지만 여전히 pushviewcontroller 문장을 제거한 후에도 작업을 수행하지 못했습니다. – user1120133

+0

흠, presentModal 라인없이 네비게이션 컨트롤러에 뷰를 밀어 넣으면 작동합니까? –

0

infoItem의 대상이 nil로 설정됩니다. Infobuttonpressed가 정의 된 클래스의 인스턴스로 설정해야합니다. mainviewController라고 가정합니다.

또한 호출 할 선택기는 @selector (Infobuttonpressed)로 지정되며 메서드는 "Infobuttonpressed :"즉 매개 변수로 지정됩니다. 대상을 수정하면 런타임 오류가 발생할 가능성이 높습니다.

그런 다음 사물을 다루는 방식에 몇 가지 특성이 있습니다. Nik이 이미 대답했듯이, 모달로 (presentModalViewController를 사용하여) 뷰를 표시할지 아니면 네비게이션 스택의 일부로 표시할지 (pushViewController를 사용하여) 여부를 선택해야합니다. 둘 다 할 수 없습니다.

네비게이션 스택의 일부로 제시하면 탐색 막대가 이미 있으므로 직접 추가해서는 안됩니다. self.navigationItem의 속성을 설정하기 만하면됩니다.

자세한 내용은 View Controller Programming Guide을 확인하십시오.

관련 문제