Iphone 一旦在UIViewController上按下拥有的TableView,UITableViewController不会自动使用键盘滚动';s子视图
我已经玩了一段时间Iphone 一旦在UIViewController上按下拥有的TableView,UITableViewController不会自动使用键盘滚动';s子视图,iphone,uitableview,Iphone,Uitableview,我已经玩了一段时间UITableView,当我碰到键盘和滚动问题时,我决定使用UITableViewController解决它,并利用键盘显示时自动滚动的优势。不幸的是,这种情况并没有发生在我身上,我也不明白为什么,我已经尝试了很多东西,并放弃了向社区提问 以下是我到目前为止的情况: 常规的UIViewController处理UIView(MyView.xib)(这是 还有根视图) 常规的UITableViewController处理 UITableView在单独的XIB文件(MyTable.X
UITableView
,当我碰到键盘和滚动问题时,我决定使用UITableViewController
解决它,并利用键盘显示时自动滚动的优势。不幸的是,这种情况并没有发生在我身上,我也不明白为什么,我已经尝试了很多东西,并放弃了向社区提问
以下是我到目前为止的情况:
UIViewController
处理UIView
(MyView.xib)(这是
还有根视图)UITableViewController
处理
UITableView
在单独的XIB
文件(MyTable.XIB)中UITableView单元格
已被拖到(MyTable.xib)中,并与UITableView
并排驻留。此UITableViewCell
没有自定义类。还有一个插座连接到UITableViewController
classUITextField
位于UITableViewCell
UITableViewController
类关联UITableView
的委托和数据源连接到文件的所有者UITableView
UITableViewCell
UITextField
-(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath
{
静态NSString*CellIdentifier=@“Cell”;
if(indexPath.row==5)返回myCell;
UITableViewCell*单元格=[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
如果(单元格==nil){
cell=[[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault重用标识符:CellIdentifier]自动释放];
}
cell.textLabel.text=[NSString stringWithFormat:@“测试”];
返回单元;
}
最后,在我的ViewController
的viewDidLoad
中,我创建了UITableViewController
的一个实例并显示它。它成功地在底部显示了5行和我的自定义行。都在主视图中,但是
-(void)viewDidLoad
{
[超级视图下载];
mtc=[[MortgageTableController alloc]initWithNibName:@“MyTable”捆绑包:nil];
mtc.view.frame=CGRectMake(0,44,320,375);
[self.view addSubview:mtc.view];
}
我遇到的问题是,如果单击UITextField
,我看不到表在视图中自动滚动。我认为这是使用UITableViewController
的优点之一,或者我可能在这里做错了什么
我还尝试了选择和/或将表滚动到行中,但没有成功。在superView中嵌入tableView时,您无法获得表视图控制器的典型行为。talble view控制器在控制全屏tableView(例如,在导航控制器上按下)时发生的情况是,当键盘出现时,会调整table view的大小
由于您主要拥有的是一个视图控制器,您必须完成以下工作:将视图控制器或表视图控制器添加为键盘通知观察者,并将表视图滚动到您需要的位置。我遇到了类似的问题,但我使用的是tableviewcontroller,因此我应该免费获得tableview偏移行为。问题是我在调用
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(keyboardDidShow)name:UIKeyboardDidShowNotification对象:nil]代码>。我认为这导致tableviewcontroller没有收到此通知(我想可能一个对象只能注册一个notif方法)。将上述更改为[[NSNotificationCenter defaultCenter]addObserver:自选择器:@selector(keyboardDidShow)name:UIKeyboardWillShowNotification对象:nil]代码>解决了我的问题。您需要调用super View将显示以自动滚动
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
// your code
}
编辑:7月19日,这项工作的先决条件是您的控制器是UITableViewController的子类。谢谢你的回复。这是一个非常令人惊讶的设计。您的意思是,一旦我将TableView添加到UIViewController(父视图)的子视图中,即使该视图的所有功能都是由UITableViewController(子视图)控制的,我也不了解子视图的交互行为?所以在导航控制器上推送tableView与在父UIViewController上推送tableView不同?我尝试过你的建议,但滚动似乎比我喜欢的要复杂一些,所以我想尝试UITableViewController的内置功能。我也有这个问题,这帮助很大:“TPKeyboardAvoiding”添加tableview控制器在uiviewcontroller上时不会自动滚动是真的吗?。你有任何参考说明吗?对我来说,自动滚动在我的示例项目中起作用,但在我的真实项目中不起作用,我很想知道其中的细微差别。非常感谢!我想知道为什么它在一个视图上如此容易工作,而在另一个视图上却不工作!在其他地方,我看到了一些繁琐的代码,重新调整键盘的整个视图…完美的答案!太简单了。太棒了。它救了我一天