일부 정적 셀 (UITextFields로 채워짐)이있는 UITableViewController가 있습니다. 이제 내 스크린 중간에 활성화 된 UITextField를 유지하고 싶습니다. (비록 하나의 Cell/UITextfield를 위/아래로 이동하더라도).iOS : 키보드가 표시된 상태에서 화면 중간에 활성 UITextField 유지
어떻게하면됩니까?
일부 정적 셀 (UITextFields로 채워짐)이있는 UITableViewController가 있습니다. 이제 내 스크린 중간에 활성화 된 UITextField를 유지하고 싶습니다. (비록 하나의 Cell/UITextfield를 위/아래로 이동하더라도).iOS : 키보드가 표시된 상태에서 화면 중간에 활성 UITextField 유지
어떻게하면됩니까?
나는 과거에 이것을 두 번이나했지만,별로 좋아하지 않았습니다. 해결책은 테이블을 위로 올려서 선택한 셀을 계속 볼 수있게하는 것이 었습니다. 키보드가 나타나거나
[[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)#>
에서
도 간단 ... 당신의 세포로 이동합니다. 이 경우 테이블 뷰의 프레임을 변경하고 셀이 선택 취소되면 다시 변경해야 할 수 있습니다. 또는 스크롤 인세 트 속성입니다.
셀이 테이블의 맨 아래에 있으면 키보드에 그대로 남아 있습니다. 결국, 당신은 여전히 키보드를 감지해야합니다/제거하고 그에 따라 프레임을 조정하십시오. 저를 믿으십시오. 사실, 내가 이걸로 고생했을 때 내가 시도한 첫 번째 일을 낭비했다. – BBog
나는 당신의 방법이 효과가 있다는 것을 안다. 사실, 내가 틀리지 않다면, 그것은 그들의 프로젝트 중 하나에서 애플 자신의 솔루션 중 하나에서 영감을 얻는다. 정확히 어느 것이지 기억하지만 테이블 뷰가 아니지만 scrollView (제 생각에는 그리 큰 차이가 없음)에서 비슷한 솔루션을 보았을 것입니다. –
사과의 솔루션에 대해 잘 모릅니다. 나는 UITableView API에서 비슷한 것을 찾으려고 시도한 후에 나 자신을 생각해 냈지만 좋은 해결책이라고는 생각하지 못했다. 오히려 강제적이거나 우아하지는 않지만 트릭을 수행한다. – BBog
그레이트 :). 고맙습니다! – user1704644