2009-05-25 2 views
0

두 번째 NavBar로 편집 가능한 텍스트 뷰 - 텍스트가 표시되지만 너무 늦었습니다.두 번째 NavBar로 편집 가능한 텍스트 뷰 - 텍스트가 표시되지만 너무 늦음

앱에 하나의 내비게이션 컨트롤러가 있습니다. 기본적으로 3 단계로 구성된 iPhone 앱이 있습니다.

  1. 레벨 1 - 카테고리 이름을 가진 표

  2. 레벨 2 - 선택된 카테고리에 대한 항목의 목록이 표

  3. 레벨 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]; 

} 
+0

두 번째 NavBar는 UITextEdit 의 영역을 숨겨서 텍스트를보기 전에 약 4 줄을 입력해야했습니다. 나는 UITextEdit의 높이를 44 픽셀 낮추어야한다고 생각한다. – mbarron

답변

0

두 번째 Navbar의 내가 텍스트를보기 전에 약 4 줄을 입력했다 있도록 UITextEdit의 영역을 숨기고 있었다. 나는 믿는다. UITextEdit의 높이를 44 픽셀 낮추어야한다.

관련 문제