UITabBarController 안에 UINavigationController가 있습니다. navigationcontroller에는 항목 편집을위한 UITableView와 양식이 있습니다. 문제는 편집 중에 탭을 탭하면 양식이 지워지고 사용자가 UITableView로 다시 덤프된다는 것입니다.iOS -보기에서 탐색 할 때 묻는 메시지
편집보기에서 탐색을 확인하는 메시지를 추가 할 수있는 방법이 있습니까?
UITabBarController 안에 UINavigationController가 있습니다. navigationcontroller에는 항목 편집을위한 UITableView와 양식이 있습니다. 문제는 편집 중에 탭을 탭하면 양식이 지워지고 사용자가 UITableView로 다시 덤프된다는 것입니다.iOS -보기에서 탐색 할 때 묻는 메시지
편집보기에서 탐색을 확인하는 메시지를 추가 할 수있는 방법이 있습니까?
마지막으로 뒤로 화살표처럼 보이는 사용자 정의 UIBarButtonItem을 사용하여이 문제를 해결했습니다.
먼저 편집 상태를 저장하기 위해 .h에 BOOL을 선언하십시오. 또한 나중에 선택된 행을 저장하기 위해 사용할 임시 변수를 선언하십시오. 당신의 viewDidLoad에서
BOOL isEditing;
NSUInteger selectedRow;
, 그런 다음 UITextFieldDelegate
및 UIAlertViewDelegate
에 뷰 컨트롤러를 준수 할 수 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];
}
희망! 당신은 스택에이 "양식을"밀어 경우
하지만 스토리 보드를 사용하고 있으므로 편집 컨트롤러는 상위 뷰 컨트롤러 내부에 있다는 것을 알 수있는 한 지식이 없습니다. – Echilon
당신은 당신이
@property(nonatomic) BOOL hidesBottomBarWhenPushed
그들이 양식 완료 될 때까지 탭 표시 줄이 숨겨져있을 것입니다 그런 식으로 설정할 수하는 UINavigationController가를 사용하고 있기 때문에.
"형식"은 무엇입니까? 또한 uinavigationcontroller가 뷰를 변경하거나 tabbarcontroller가 뷰를 변경할 때 "확인"경고를 원하십니까? 게시물은 한 가지만 말하고 다른 것은 태그입니다. P – DanZimm
"양식"은 스토리 보드를 통해 세그 (segue)로 표시되는 또 다른 UIViewController입니다.이상적으로는 두 가지 모두에 프롬프트를 추가 할 것이지만 그 기술이 동일 할 것이라고 생각합니다. – Echilon