두 번째 NavBar로 편집 가능한 텍스트 뷰 - 텍스트가 표시되지만 너무 늦었습니다.두 번째 NavBar로 편집 가능한 텍스트 뷰 - 텍스트가 표시되지만 너무 늦음
앱에 하나의 내비게이션 컨트롤러가 있습니다. 기본적으로 3 단계로 구성된 iPhone 앱이 있습니다.
레벨 1 - 카테고리 이름을 가진 표
레벨 2 - 선택된 카테고리에 대한 항목의 목록이 표
레벨 3 - 항목에 대한 자세한 내용은 UITextView 등 여러 가지 뷰와 탭보기 TextView가있는 이러한 탭보기에 하나만 편집 할 수 있습니다.
사용자가 편집 가능한 TextView를 누르면 키 보드 이 나타납니다. 사용자는 TextView를 입력 할 수 있습니다. 문자는 입력시 으로 표시됩니다.
이 레벨 3 TextView 맨 위에는 BackButton과 오른쪽에 "home-> Level1"버튼이있는 NavBar (모든 세 가지 레벨에 대해 변경 사항이 있음)가 있습니다. 나는 기존의 Navbar의 아래에 두 번째 내비게이션 바 을 추가 편집 가능한 텍스트 뷰에서까지
은 모두 잘 작동합니다. 이 두 번째 NavBar에는 두 개의 버튼 도 있습니다. 저장/취소입니다.
이러한 저장 및 취소 버튼을 클릭하면 올바른 동작 에 도달합니다. 한 가지 예외를 제외하고 모두 완벽합니다. 입력 된 텍스트는 저장 또는 취소 버튼을 터치 할 때까지 TextView에 표시되지 않습니다. 내 TabViewController.m
에있는 관련 버튼 설정 및 조치 방법은 다음과 같습니다. 이 데이터를 유지해야합니다.
나는 TextView와 handleTextChange 액션에서 Notification을 얻는 것이 트릭을 할 것이라고 생각했지만 행운이 없다. 나는 붙어있다.
.........
- (void)loadView {
self.myTextView = [[UITextView alloc] init];
self.myTextView.delegate = self;
self.view = self.myTextView;
//UITextViewTextDidChangeNotification
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc addObserver:self
selector:@selector(handleTextChange:)
name:UITextViewTextDidChangeNotification
object:nil];
NSLog(@"Registered DG_HandleChangeTextNotification with notification center.");
}
- (void)handleTextChange:(NSNotification *)note
{
[self.myTextView setNeedsDisplay] ;
NSLog(@"...Handled Text Change.");
}
- (void)textViewDidBeginEditing:(UITextView *)textView
{
// provide my own Done/Save button to dismiss the keyboard
saveNavigationBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
saveNavigationBar.barStyle = UIBarStyleBlackOpaque;
UINavigationItem *doneItem = [[UINavigationItem alloc] init];
doneItem.title = @"My Notes";
UIBarButtonItem *doneItemButton = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemSave
target:self action:@selector(saveAction:)];
UIBarButtonItem *cancelItemButton = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self
action:@selector(cancelAction:)];
[doneItem setRightBarButtonItem:doneItemButton animated:NO];
[doneItem setLeftBarButtonItem:cancelItemButton animated:NO];
[saveNavigationBar pushNavigationItem:doneItem animated:NO];
[self.view addSubview:saveNavigationBar];
[doneItem release];
[cancelItemButton release];
[doneItemButton release];
}
- (void)saveAction:(id)sender
{
// finish typing text/dismiss the keyboard by removing it as the first responder
self.text = self.myTextView.text;
[self.saveNavigationBar removeFromSuperview];
[self.myTextView resignFirstResponder];
}
- (void)cancelAction:(id)sender
{
[self.saveNavigationBar removeFromSuperview];
[self.myTextView resignFirstResponder];
}
두 번째 NavBar는 UITextEdit 의 영역을 숨겨서 텍스트를보기 전에 약 4 줄을 입력해야했습니다. 나는 UITextEdit의 높이를 44 픽셀 낮추어야한다고 생각한다. – mbarron