希望有人知道该怎么做,这让我疯了!
我在现有应用程序中有一个非常简单的UITableViewController,我使用界面构建器添加了一个UISearchBar(拖放)
注意:在iOS 6或iOS 7中进行测试时存在此问题
我的问题是,当运行应用程序时,搜索栏会显示在结果的BOTTOM上

当我点击搜索区域进行搜索时,搜索栏会轻弹到页面顶部

起初我认为"这是我",所以我完全删除了控制器,包括所有代码,并从头开始重建页面,以避免我可能犯的任何错误.不幸的是有相同的结果
IB中的结构是:

控制器代码只是在一分钟就完成了基本操作 cellForRowAtIndexPath
我是iOS开发的新手,所以请放轻松我吧:)
使用适用于iOS 5的Xcode 4.2,我在IB中构建了一个视图控制器,其中的tableview通过push segue链接到详细视图控制器(在表视图单元级别)
我想根据所选单元格的索引,使用我的数据源中的数据设置详细页面标签.最初我编写"didSelectRowAtIndexPath"只是为了发现在segue处理之后调用它,并发现我需要调用prepareForSegue而不是
我的问题是,无论我尝试什么,因为tableView不是prepareForSegue的传递参数(与我迄今为止使用的大多数其他方法不同),我很难在视图控制器中访问tableView以便调用indexPath方法,这样我可以引用我的数据源
我已经看到很多使用self的例子,如下所示,但是这会导致一个错误,指出viewView在视图控制器中不存在
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
NSIndexPath *selectedIndexPath = [self.tableView indexPathForSelectedRow];
DetailViewController *detail = [segue destinationViewController];
detail.primary = [datasource objectAtIndex:selectedIndexPath.row];
detail.seconday = [datalist objectForKey:detail.primary];
}
Run Code Online (Sandbox Code Playgroud)
我也试过用
ViewController *main = [segue viewController];
Run Code Online (Sandbox Code Playgroud)
而不是使用自我,但这导致相同的问题
我知道我可以将示例重写为Table View Controller,但是想知道这是否可能?正如我所见,人们在开发中使用这两种方法
作为参考,我正在学习本教程... http://kurrytran.blogspot.com/2011/10/ios-5-storyboard-and.html
当我到达完成详细信息页面的部分时,我想,为什么不使用segue将表格视图单元格链接到详细信息页面,并在显示详细信息页面之前编写状态和资本的复制代码.从本教程中可以看出,主控制器是一个视图控制器
我的理解是,如果需要在以后开发更复杂的东西,不使用UITableViewController会给任何应用程序更大的灵活性
希望你可以帮忙,Izzy
因此,我正在尝试模拟管理电话号码时标准Apple代码在联系人应用上的工作方式.具体来说,我正在努力从tableview中删除一行,如果它是空的并且用户导航到任何其他行
我的问题是,当tableview重新加载导致UITextField重新签名其响应者时,我需要再次为用户导航到的文本字段设置响应者
我有UITextField委托,我正常处理 textFieldShouldBeginEditing , textFieldDidBeginEditing , textFieldShouldEndEditing , textFieldDidEndEditing
为了处理这个功能,我的代码就在textFieldDidEndEditing其中,我从tableview数组中删除了数据,并且由于tableview有2个部分,我正在调用:
[MyTableView reloadSections:[NSIndexSet indexSetWithIndex:1] withRowAnimation:UITableViewRowAnimationNone];
Run Code Online (Sandbox Code Playgroud)
在textFieldDidBeginEditing我使用以下命令保存正在编辑的textField的indexPath 期间:
EditableCustomCell *textFieldCell = (EditableCustomCell *)[[textField superview] superview];
NSIndexPath *indexPath = [MyTableView indexPathForCell:(EditableCustomCell *)textFieldCell];
responderIndexPath = [NSIndexPath indexPathForRow:indexPath.row inSection:indexPath.section];
Run Code Online (Sandbox Code Playgroud)
然后我使用以下代码将正确的行textField设置为第一个响应者:
EditableCustomCell *customCell = (EditableCustomCell *)[MyTableView cellForRowAtIndexPath:responderIndexPath];
[customCell.editableTextField becomeFirstResponder];
Run Code Online (Sandbox Code Playgroud)
一切似乎都很好,直到接近处理结束时,突然textFieldDidBeginEditing开始返回第0行第0行的indexPath(即使在检查标记值或包含的文本时返回文本字段的正确值)
以下是上述过程开始时的日志:
- textFieldDidEndEditing started <-- start of delete processing
- textFieldDidEndEditing - tableviewData - replacing object at index 1
CustomTableViewController.deleteRow - delete called for indexPath section 1 ... row …Run Code Online (Sandbox Code Playgroud) objective-c uitableview uitextfield nsindexpath becomefirstresponder
objective-c ×2
uitableview ×2
ios ×1
ios5 ×1
nsindexpath ×1
tableview ×1
uisearchbar ×1
uitextfield ×1