【发布时间】:2013-11-17 02:38:28
【问题描述】:
我正在尝试设置 tableview 以在选择隐藏在键盘后面的文本字段时滚动。我尝试了多种我发现的方法,包括使用键盘通知、textFieldDid/ShouldBegin/EndEditing 等,但似乎没有一个每次都有效。
这是我正在使用的屏幕截图:
我有两个问题:
首先,我使用日期选择器代替底部文本字段的键盘(屏幕截图中的屏幕外,但您可以理解)。由于这在技术上不是键盘,因此我用于设置键盘偏移的方法不适用于此文本字段。我确信我可以获取日期选择器的高度并相应地调整如果这是当前选择的项目,但我想知道是否有更简单的方法将其合并到键盘方法中。
其次,当添加更多单元格时,偏移量变得不正确。这个视图的设置方式是一个分成多个部分的表格视图。当用户点击“添加进一步支持”按钮时,它会在支持部分中插入一行。当我尝试设置表格滚动偏移时,似乎没有注册由于此而发生的高度变化。有没有办法让我正确注册高度?
这是一些相关的代码
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
self.activeField = textField;
[self setOffsetForKeyboard];
}
- (void)textFieldDidEndEditing:(UITextField *)textField
{
if (self.activeField == self.dateTextField) {
[self datePickerValueChanged:nil];
}
self.activeField = nil;
}
- (void)registerForKeyboardNotifications
{
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShow:)
name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillBeHidden:)
name:UIKeyboardWillHideNotification object:nil];
}
- (void)keyboardWillShow:(NSNotification*)aNotification
{
NSDictionary* info = [aNotification userInfo];
self.keyboardSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
[self setOffsetForKeyboard];
}
- (void)keyboardWillBeHidden:(NSNotification*)aNotification
{
[self.myTable setContentOffset:CGPointMake(0.0, -(self.navigationController.navigationBar.frame.size.height + kStatusBarHeight))animated:YES];
}
- (void)setOffsetForKeyboard{
CGPoint location =[self.activeField.superview convertPoint:self.activeField.frame.origin toView:nil];
if (location.y > self.view.frame.size.height - self.keyboardSize.height-kKeyboardOffset) {
[self.myTable setContentOffset:CGPointMake(0.0, location.y-self.keyboardSize.height-kKeyboardOffset) animated:YES];
}
}
【问题讨论】:
标签: ios iphone objective-c uitableview