2011-10-18 3 views
3

저는 iOS 개발 초보자입니다. 나는 또한 떨어져 다시가는, 다른 기능을 실행할iOS - backBarButtonItem이 맞춤 함수를 실행하는 방법은 무엇입니까?

UIBarButtonItem *temporaryBarButtonItem=[[UIBarButtonItem alloc] init]; 
[email protected]"Back"; 
self.navigationItem.backBarButtonItem = temporaryBarButtonItem; 
[temporaryBarButtonItem release]; 

- 내 backBarButtonItem을 설정하려면 다음 코드를 사용하고 있습니다. 그게 가능하니? 또는 다른 버튼을 저장해야합니까?

+2

'viewDidDisapper'또는 'viewWillDisappear' 메소드에서 실제로 그렇게 할 수 있습니다. 이보기 만 되돌아 갈 수 있고보기를 제공하지 않으면이 옵션이 작동합니다. – JoePasq

+0

그건 의미가 있습니다. 내가 그것을 받아 들일 수 있도록 답으로 만들고 싶니? – Suchi

+1

좋습니다. :) – JoePasq

답변

7

실질적으로는 viewDidDisappear 또는 viewWillDisappear 방법으로 가능합니다.

이보기는 되돌릴 수 있고보기를 제공하지 않으면 작동합니다.

그러나 하위보기, 모달보기를 제공하거나 탐색 계층에서 더 자세히 이동하거나 viewDidDisapper이 호출되는 다른보기 작업을 수행하려면 뒤로 버튼 코드 논리를 분리해야합니다 어쩐지.

예를 들어이보기에서 모달보기를 제공하는 경우 self.modalViewController이 nil인지 확인하고, 모달보기가 없으면 뒤로 단추 코드를 안전하게 실행할 수 있습니다. 그것이 nil이 아니면 모달보기가 있으며 뒤로 버튼 코드를 실행하면 안됩니다. (viewWillDisappear은 모달 뷰 컨트롤러를 -nil로 등록해야 함).

1

xib에 UIBarButtonItem을 추가하고 거기에 처리기 이벤트를 추가 할 수 있습니다.

다른 방법으로 UIButton 및 추가 이벤트 처리기 인 사용자 지정보기로 UIBarButtonItem을 만듭니다.

3

매우 간단합니다.

[[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(myCoolAction:)]; 

그런 다음 myCoolAction :을보기 컨트롤러의 적절한 메소드로 변경하고 처리하십시오. 즐겨!

편집 : 오, 이것을 backBarButtonItem에 사용하려는 경우 예상대로 작동하지 않습니다. 시스템은 backBarButtonItem에 대한 대상/작업을 호출하지 않습니다. 그들은 일단 backBarButtonItem에 할당되면 해제됩니다.

이 문제를 처리하는 한 가지 방법은 UINavigationController를 대리인으로 너무 연결하는 것입니다. 그렇다면 귀하의

- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated 

방법 거기서 몇 가지 사용자 정의 동작을 할 수 있습니다.

+0

마찬가지로 @ JoePasq는 viewDidAppear 및 viewDidDisappear를 사용할 수도 있다고 지적했습니다. 그러나 이러한 메소드는 네비게이션이 아닌 다른 상황 (예 : presentModalViewController : -> dismissModalViewControllerAnimated :) 아래에서 호출 될 것입니다. – logancautrell

1

엄밀히 말하면 UIKit을 사용하여 수행 할 수 없습니다.

backBarButtonItem의 문서를 참조하십시오 :

대상 및 전무해야 설정 한 뒤 바 버튼 항목의 작업입니다. 기본값은 내비게이션 항목 제목을 표시하는 막대 단추 항목입니다.

주변의 작품은 leftBarButtonItem을 지정하고이 @selector 대상을 부착하여 필요 어떤 사용자의 행동에 연결하는 것입니다.

까다로운 부분은 단추의 이미지 자체입니다. 아시다시피 기본값은 직사각형 버튼이 아닙니다. 오히려 왼쪽 화살표 모양을 가지고 있습니다.이를 위해 사용자 정의 이미지를 설정하여 단추가 기본값으로 표시되도록해야합니다.

자원의 톤이 모든 UIKit의 작품을 추출하기 위해이 일을 포함하여 그을 할있다 :

https://github.com/0xced/UIKit-Artwork-Extractor

1

는 대신 viewDidDisappear 또는 viewWillDisappear를 사용하는 같은 것을 할 수 있어야합니다.

장소이 viewDidLoad의 :

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Cancel" style:UIBarButtonItemStyleDone target:self action:@selector(cancelButtonAction:)]; 
self.navigationItem.leftItemsSupplementBackButton = NO; 

그런 다음이 같은 사용자 정의 코드에 대한 방법 cancelButtonAction cancelButtonAction와 백 기능을 만들 수 있습니다

- (void)cancelButtonAction:(id)sender { 
    //Your custom code goes here... 


    //This will perform the back functionality if using a Navigation Controller 
    [self.navigationController popViewControllerAnimated:YES]; 
} 

참고 :이 사용하게됩니다 화살표가없는 직사각형 버튼.

관련 문제