2011-12-23 5 views
0

UITabBarController 안에 UINavigationController가 있습니다. navigationcontroller에는 항목 편집을위한 UITableView와 양식이 있습니다. 문제는 편집 중에 탭을 탭하면 양식이 지워지고 사용자가 UITableView로 다시 덤프된다는 것입니다.iOS -보기에서 탐색 할 때 묻는 메시지

편집보기에서 탐색을 확인하는 메시지를 추가 할 수있는 방법이 있습니까?

+0

"형식"은 무엇입니까? 또한 uinavigationcontroller가 뷰를 변경하거나 tabbarcontroller가 뷰를 변경할 때 "확인"경고를 원하십니까? 게시물은 한 가지만 말하고 다른 것은 태그입니다. P – DanZimm

+0

"양식"은 스토리 보드를 통해 세그 (segue)로 표시되는 또 다른 UIViewController입니다.이상적으로는 두 가지 모두에 프롬프트를 추가 할 것이지만 그 기술이 동일 할 것이라고 생각합니다. – Echilon

답변

0

마지막으로 뒤로 화살표처럼 보이는 사용자 정의 UIBarButtonItem을 사용하여이 문제를 해결했습니다.

1

먼저 편집 상태를 저장하기 위해 .h에 BOOL을 선언하십시오. 또한 나중에 선택된 행을 저장하기 위해 사용할 임시 변수를 선언하십시오. 당신의 viewDidLoad에서

BOOL isEditing; 
NSUInteger selectedRow; 

, 그런 다음 UITextFieldDelegateUIAlertViewDelegate에 뷰 컨트롤러를 준수 할 수 NO

- (void)viewDidLoad { 
    // initialization 
    isEditing = NO; 

    [super viewDidLoad]; 
} 

에 부울을 초기화합니다. 텍스트 필드 대리자는 편집이 끝나고 텍스트 필드를 시작할 때 컨트롤러가 콜백을 수신 할 수있게하며, 경고보기 대리자는 경고보기가 닫힐 때 콜백을받을 수 있도록합니다.

@interface MyController : UIViewController <UITextFieldDelegate, UIAlertViewDelegate> 

또한 모든 텍스트 필드의 대리자를 컨트롤러에 할당하도록 설정해야합니다. 사용자가 텍스트 필드를 추가 할 때 그래서 cellForRowAtIndexPath에, 그냥이 추가 :

당신이, 당신은 모든 텍스트 필드에서 콜백을 받도록 설정하면
textField.delegate = self; 

- 그래서 지금과 같이 다음과 같은 두 가지 방법을 구현 :

- (void)textFieldDidBeginEditing:(UITextField *)textField { 
    isEditing = YES; 
} 

- (void)textFieldDidEndEditing:(UITextField *)textField { 
    isEditing = NO; 
} 

지금 여기 열쇠는 (당신이 일반적으로 테이블 뷰의 행을 선택 할 때처럼) 그래서 그냥 같은 것을 할, 다음 뷰를 추진하기위한 별도의 방법을 만드는 것입니다 :

- (void)showNextView { 
    // in this method create the child view controller and push it 
    // like you would normally when a cell is selected 
    // to get the selected row, use the `selectedRow` variable 
    // we declared earlier. 
} 

이제 사용자가 행을 선택할 때 테이블 뷰 콜백을 구현해야합니다.이 메서드에서는 편집 중인지 테스트하고 프롬프트가있는 경우 프롬프트를 표시합니다. 그렇지 않은 경우 다음보기로 이동합니다.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    selectedRow = [indexPath row]; 

    if (isEditing) { 
     UIAlertView *alert = [[UIAlertView alloc] 
        initWithTitle:@"Continue Editing?" 
        message:@"Continue Editing or discard edits" 
        delegate:self 
        cancelButtonTitle:@"Discard" 
        otherButtonTitles:@"Continue"]; 
     [alert show]; 
     [alert release]; 
     return; 
    } 
    [self showNextView]; 
} 

마지막으로, 우리는 경고보기를 해제 할 때의 경고보기 위임 콜백을 구현해야합니다 모든 의미가 당신에게 도움이

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex { 
    if (buttonIndex != [alertView cancelButtonIndex]) return; // stay editing 
    [self showNextView]; 
} 

희망! 당신은 스택에이 "양식을"밀어 경우

+0

하지만 스토리 보드를 사용하고 있으므로 편집 컨트롤러는 상위 뷰 컨트롤러 내부에 있다는 것을 알 수있는 한 지식이 없습니다. – Echilon

0

당신은 당신이

@property(nonatomic) BOOL hidesBottomBarWhenPushed 

그들이 양식 완료 될 때까지 탭 표시 줄이 숨겨져있을 것입니다 그런 식으로 설정할 수하는 UINavigationController가를 사용하고 있기 때문에.