[iOS]UINavigationController에서 데이터 넘길 때

2012. 9. 14. 09:26제2외국어/iOS


1. 네비게이션바 뒤로가기 버튼에...
: 네비게이션컨트롤러를 이용할 때 뒤로가기 버튼이 자동으로 구성되는데, 이 경우에는 뒤로가기 버튼을 눌렀을 때 
    (1) 원하는 메소드 호출
    (2) 커스텀 이미지
이 두가지를 하기가 어렵다.
(1)의 임시방편으로 viewDidDisappear 함수를 이용해서 확인할 수도 있지만, 이 방법은 뒤로가기 뿐만 아니라 다른 페이지로
넘어가는 경우에도 발생하기에 정확하게 문제를 해결할 수 있다고 볼 수 없다.


해결책

: 커스텀으로 버튼을 만들어준다음 액션을 연결해 주거나, 이미지를 설정한다.

해당 viewDidLoad에서 
UIBarButtonItem *backButtonItem = [[UIBarButtonItem alloc]initWithTitle:@"뒤로" style:UIBarButtonItemStyleBordered target:self action:@selector(goToBeforePage)];

self.navigationItem.leftBarButtonItem = backButtonItem;


하지만 위 방법으로는 UIBarButtonItem 형식이라, 만약에 네비게이션아이템의 형식을 원한다면..

[self.navigationItem.leftBarButtonItem setAction:@selector(goToBeforePage)];
이렇게 생성된 버튼에 @selector 만 연결시켜주면 된다.


이미지를 덮어 쒸우려면

[self.navigationItem.leftBarButtonItem setImage:[UIImage imageNamed:@"test.png"]];

이런식으로!




2. 네비게이션바가 연결된 뷰에 데이터를 넘길 때...


( - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 사용할 때 )

보통 뷰에서 뷰 이동간 데이터를 전달할 때, - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 를 사용
그러나 네비게이션컨트롤러가 연결된 뷰의 경우 문제가 되는데...


 

문제 없음

문제 발생


[원인]

문제 발생하는 이유는 destinationViewController가 다음 뷰로 인식은 되는데 실제로는 NavigationController에서 검사를 하기 때문에 생기는 오류이다.

빌드할 떄는 문제가 되진 않지만 실제 실행시 : ~unrecognized selector sent to instance 라는 메시지를 볼 수 있을 것이다.

해결책

: 네비게이션컨트롤러를 destinationViewController에 연결시킨 다음, 다음 뷰컨트롤러를 네비게이션컨트롤러의 
topViewController로 지정, 그리고 데이터를 넘기면 된다.


UINavigationController *nc = segue.destinationViewController;
nextViewController *vc = (nextViewController *)[nc topViewController];

[vc setTitle : @"test"];




'제2외국어 > iOS' 카테고리의 다른 글

xCode 4.5 for iOS 6.0 달라진 점(2)  (0) 2012.10.04
xCode 4.5 for iOS 6.0 달라진 점(1)  (6) 2012.09.24
Naming is important!!!  (1) 2012.09.11
[iOS]탈옥 여부 확인하기...  (0) 2012.08.08
WWDC2012에 대한 기대  (0) 2012.06.08