UITableViewController自动管理文本字段编辑:滚动到可编辑内容,同时更改插图以在屏幕上显示文本字段和键盘,而不会重复键盘。这是非常酷的功能,因为我不需要编写大量代码来计算新的插图,滚动到内容,检查deviceOrientation是否更改或键盘隐藏等等。
但是当我们使用 SplitViewController 时,该功能失败,在我们添加到root后,控制器自动管理textfield仅在面向Pad的屏幕上工作。我认为这是Apple的错误,但也许这是我的错误,我做错了什么?我已经检查过SplitViewController - >导航控制器 - > Apple的HID中的UITableViewController层次结构是正确的。
我已经为这个问题编写了简单的应用程序,所以你可以看到这个bug,如何修复它?
使用该错误链接到简单,新鲜的XCode项目:https://www.dropbox.com/s/o315awgonzeskeo/TableEditing.zip?dl=0
半解决方案:如果设备是iPhone,则删除SplitViewController。一切都在iPad上运行正常,但不适用于iPhone,所以我们可以尝试:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let rootController = storyboard.instantiateViewControllerWithIdentifier("navigation") as! UINavigationController
if UIDevice.currentDevice().userInterfaceIdiom != .Pad {
// setting non-split rootView if device is iPhone
self.window!.rootViewController = rootController
}
}
但是有问题 - 我们在iPhone 6 Plus上丢失了SplitViewController(我检查过,在iPhone 6 Plus上纵向方向键盘仍然重叠,在风景上都可以)。所以这不是解决方案。
答案 0 :(得分:0)
只需设置内容大小
即可增加tableview高度tableView.contentSize = CGSizeMake(widthYouWant, heightYouWant);
或tableview底部内容来自nib的tableview的frame部分的Insets。然后通过调用
将该行滚动到顶部NSIndexPath *indexPath = [NSIndexPath indexPathForRow:row inSection:section];
[tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:YES];
让我知道这是你的; r寻找
答案 1 :(得分:0)
尝试在您UITableViewController
中设置此代码:
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:YES];
}
注意:UITableViewController在iOS 3.0中具有新功能。一个 table-view controller支持对表视图行进行内联编辑;如果, 例如,行在编辑模式下嵌入了文本字段 滚动正在虚拟键盘上方编辑的行
答案 2 :(得分:0)
您可以尝试将TPKeyboardAvoiding添加到项目中
TPKeyboardAvoiding - 一种插入式通用解决方案,用于在iOS中将文本字段移出键盘。
要与UITableViewController类一起使用,请将TPKeyboardAvoidingTableView.m和TPKeyboardAvoidingTableView.h拖放到项目中,并使您的UITableView成为xib中的TPKeyboardAvoidingTableView。
答案 3 :(得分:0)
作为选项,您可以订阅键盘通知,例如:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShow:)
name:UIKeyboardWillShowNotification
object:self.view.window];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillHide:)
name:UIKeyboardWillHideNotification
object:self.view.window];
然后当键盘即将显示时,会在一定数量的像素上移动您的视图,因此最后一行是可见的。键盘隐藏时 - 将其向下移动。
答案 4 :(得分:0)
处理此类情况的最佳方法是手动控制static <A,B,R> Val<R> combine(ObservableValue<A> src1, ObservableValue<B> src2, BiFunction<? super A,? super B,? extends R> f)
static <A,B,C,R> Val<R> combine(ObservableValue<A> src1, ObservableValue<B> src2, ObservableValue<C> src3, TriFunction<? super A,? super B,? super C,? extends R> f)
static <A,B,C,D,R> Val<R> combine(ObservableValue<A> src1, ObservableValue<B> src2, ObservableValue<C> src3, ObservableValue<D> src4, TetraFunction<? super A,? super B,? super C,? super D,? extends R> f)
static <A,B,C,D,E,R> Val<R> combine(ObservableValue<A> src1, ObservableValue<B> src2, ObservableValue<C> src3, ObservableValue<D> src4, ObservableValue<E> src5, PentaFunction<? super A,? super B,? super C,? super D,? super E,? extends R> f)
static <A,B,C,D,E,F,R> Val<R> combine(ObservableValue<A> src1, ObservableValue<B> src2, ObservableValue<C> src3, ObservableValue<D> src4, ObservableValue<E> src5, ObservableValue<F> src6, HexaFunction<? super A,? super B,? super C,? super D,? super E,? super F,? extends R> f)
并将其移至键盘上方。我为它创建了small class,如果键盘出现/消失,它会增加和减少约束的大小(可能是从UITableView
到视图底部的约束)。