我已經嘗試了大部分StackOverflow上的示例。我也用蘋果的。我似乎對他們的問題是,他們沒有考慮UITextField在UITableView中。我已經做了很多次,但沒有這樣做。我有一個自定義的UITableViewCell和UITextField。在常規UIViewController上的UITableViewCell中的上方滾動UITextField
在我的UITableView(不是UITableViewController)上,我需要能夠避免隱藏UITableView下的UITextField。
我有這個截至目前:
-(void)viewDidLoad
{
....
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShow:)
name:UIKeyboardWillShowNotification
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillHide:)
name:UIKeyboardWillHideNotification
object:nil];
....
}
- (void)scrollToRectOfTextField {
UITableViewCell *cell = (UITableViewCell*)[self.activeTextField superview];
CGRect r = CGRectMake(self.activeTextField.frame.origin.x,
cell.frame.origin.y+self.activeTextField.frame.origin.y,
self.activeTextField.frame.size.width,
self.activeTextField.frame.size.height);
[self.tableView scrollRectToVisible:r animated:YES];
}
- (void)keyboardDidShow:(NSNotification *)notification
{
if (UI_USER_INTERFACE_IDIOM()== UIUserInterfaceIdiomPhone) {
NSDictionary *userInfo = [notification userInfo];
CGSize size = [[userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size;
NSLog(@"TableView: %@", NSStringFromCGRect(self.tableView.frame));
CGRect newTableViewFrame = CGRectMake(self.tableView.frame.origin.x,
self.tableView.frame.origin.y,
self.tableView.frame.size.width, self.tableView.frame.size.height - size.height);
self.tableView.frame = newTableViewFrame;
NSLog(@"New TableView: %@", NSStringFromCGRect(self.tableView.frame));
self.tableView.contentSize = CGSizeMake(self.tableView.contentSize.width, self.tableView.contentSize.height-size.height);
}
}
- (void)keyboardWillHide:(NSNotification *)notification
{
NSDictionary *userInfo = [notification userInfo];
CGSize size = [[userInfo objectForKey: UIKeyboardFrameEndUserInfoKey] CGRectValue].size;
self.tableView.frame = CGRectMake(self.tableView.frame.origin.x,
self.tableView.frame.origin.y,
self.tableView.frame.size.width,
self.tableView.frame.size.height + size.height);
NSLog(@"%@", NSStringFromCGRect(self.tableView.frame));
}
-(void)textFieldDidBeginEditing
{
[self scrollToRectOfTextField];
}
這似乎推了一堆空白了過去我的鍵盤。另請注意,我的UITextField上也有一個inputAccessoryView。
哦,我不能使用任何第三方類。我喜歡TPKeyboardAvoidingScrollView,但我不能使用任何第三方。
當你叫'[自scrollToRectOfTextField]'? – 2013-02-23 03:00:54
此外,如果您爲tableview的底部邊緣設置動畫而不是嘗試更改框架,您將獲得更平滑的動畫。 – 2013-02-23 03:01:35
這是一個很好的問題。它並沒有被用在我從中拉出來的例子中。 – 2013-02-23 03:08:30