Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 一旦在UIViewController上按下拥有的TableView,UITableViewController不会自动使用键盘滚动';s子视图_Iphone_Uitableview - Fatal编程技术网

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
    class
  • 常规的
    UITextField
    位于
    UITableViewCell
  • 我已将MyTable.xib中文件的所有者身份与
    UITableViewController
    类关联
  • 我已将
    UITableView
    的委托和数据源连接到文件的所有者
  • 这是MyTable.xib中IB中的外观

    • UITableView
    • UITableViewCell
      • UITextField
    因此,当我在UITableViewController中生成表行时,我将前5行排为常规单元格,最后一行返回我的outlet“myCell”(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上时不会自动滚动是真的吗?。你有任何参考说明吗?对我来说,自动滚动在我的示例项目中起作用,但在我的真实项目中不起作用,我很想知道其中的细微差别。非常感谢!我想知道为什么它在一个视图上如此容易工作,而在另一个视图上却不工作!在其他地方,我看到了一些繁琐的代码,重新调整键盘的整个视图…完美的答案!太简单了。太棒了。它救了我一天