2012-10-04 2 views

답변

0

나는 과거에 이것을 두 번이나했지만,별로 좋아하지 않았습니다. 해결책은 테이블을 위로 올려서 선택한 셀을 계속 볼 수있게하는 것이 었습니다. 키보드가 나타나거나

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShowNotification:) name:UIKeyboardWillShowNotification object:nil]; 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHideNotification:) name:UIKeyboardWillHideNotification object:nil]; 

은 그 때 나는 이런 식으로 뭔가, 최대 테이블 밀어 않았다 사라진

먼저 내가 알고 일부 관찰자를 추가 : 기본적으로

- (void)keyboardWillShowNotification:(NSNotification*)notification { 


    CGSize kbSize = [[notification.userInfo objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; 
    double animationDuration = [[[notification userInfo] objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue]; 
    CGPoint newCenter = self.myable.center; 

    NSLog(@"Height: %f Width: %f", kbSize.height, kbSize.width); 
    // Portrait: Height: 264.000000 Width: 768.000000 
    // Landscape: Height: 1024.000000 Width: 352.000000 

    if([[UIApplication sharedApplication] statusBarOrientation] < 3) { 
     newCenter = CGPointMake(newCenter.x, heightP - kbSize.height - self.myTable.frame.size.height/2); 
    } 
    else { 
     newCenter = CGPointMake(newCenter.x, heightL - kbSize.width - self.myTable.frame.size.height/2); 
    } 



    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:animationDuration]; 
    self.myTable.center = newCenter; 
    [UIView commitAnimations]; 
} 

- (void)keyboardWillHideNotification:(NSNotification*)notification { 
    NSLog(@"keyboard disappeared"); 
    double animationDuration = [[[notification userInfo] objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue]; 
    CGPoint newCenter = self.myTable.center; 

    if([[UIApplication sharedApplication] statusBarOrientation] < 3) { 
     newCenter = CGPointMake(newCenter.x, 0 + self.lmyTable.frame.size.height/2); 
    } 
    else { 
     newCenter = CGPointMake(newCenter.x, 0 + self.myTable.frame.size.height/2); 
    } 



    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:animationDuration]; 
    self.myTable.center = newCenter; 
    [UIView commitAnimations]; 

} 

을, 나는 키보드를 읽어 키를 테이블 중심에 추가하여 키보드를 위쪽으로 밀었 다가 키보드가 사라 졌을 때 같은 높이를 제거했습니다.

이제 잡을 수 있습니다! 매우 구체적이지만 내 코드에서 제거했습니다. 키보드가 셀을 덮을 경우에만 테이블을 이동하는 데주의해야합니다.! 그렇지 않으면 화면 상단에 보이는 셀을 밀어 넣습니다. 이 설정은보기 설정, 테두리, 테이블 크기 등에 따라 크게 달라 지므로이 부분에서 도움을 줄 수는 없지만 기본적인 아이디어를 얻었 으면합니다.

행운을 당신의 tableview의 대표 didSelectRowAtIndexPath 사용 scrollToRowAtIndexPath:<#(NSIndexPath *)#> atScrollPosition:<#(UITableViewScrollPosition)#> animated:<#(BOOL)#>에서

+0

그레이트 :). 고맙습니다! – user1704644

0

도 간단 ... 당신의 세포로 이동합니다. 이 경우 테이블 뷰의 프레임을 변경하고 셀이 선택 취소되면 다시 변경해야 할 수 있습니다. 또는 스크롤 인세 트 속성입니다.

+0

셀이 테이블의 맨 아래에 있으면 키보드에 그대로 남아 있습니다. 결국, 당신은 여전히 ​​키보드를 감지해야합니다/제거하고 그에 따라 프레임을 조정하십시오. 저를 믿으십시오. 사실, 내가 이걸로 고생했을 때 내가 시도한 첫 번째 일을 낭비했다. – BBog

+0

나는 당신의 방법이 효과가 있다는 것을 안다. 사실, 내가 틀리지 않다면, 그것은 그들의 프로젝트 중 하나에서 애플 자신의 솔루션 중 하나에서 영감을 얻는다. 정확히 어느 것이지 기억하지만 테이블 뷰가 아니지만 scrollView (제 생각에는 그리 큰 차이가 없음)에서 비슷한 솔루션을 보았을 것입니다. –

+0

사과의 솔루션에 대해 잘 모릅니다. 나는 UITableView API에서 비슷한 것을 찾으려고 시도한 후에 나 자신을 생각해 냈지만 좋은 해결책이라고는 생각하지 못했다. 오히려 강제적이거나 우아하지는 않지만 트릭을 수행한다. – BBog

관련 문제