- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:
(NSIndexPath *)indexPath
{
if (indexPath.row == 0) {
[self performSegueWithIdentifier:@"hello" sender:self];
}
if (indexPath.row == 1) {
[self performSegueWithIdentifier:@"hello1" sender:self];
}
这是我用来执行 segue 以转到指定的 View Controller 的方法。但是,我已经实现了一个搜索栏。搜索栏过滤某些单元格并重新排序。因此,不同的单元格指向不同的 View Controller 。如果我在搜索栏中搜索“hello1”,它会在表格 View 中将“hello1”显示为第一个,而不会显示“hello”。但由于“hello”设置为 indexPath.row == 0,在应用程序中点击“hello1”将执行“hello”转场,而不是“hello1”转场。我怎样才能解决这个问题?非常感谢任何帮助。
我的搜索条码:
-(void) searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText {
NSLog(@"clicked!");
if ([searchText length] == 0) {
[_results removeAllObjects];
[_results addObjectsFromArray:_testphrases];
} else {
[_results removeAllObjects];
for (NSString * string in _testphrases) {
NSRange r = [string rangeOfString:searchText options: NSCaseInsensitiveSearch];
if (r.location != NSNotFound) {
[_results addObject:string];
}
}
}
[tableView reloadData];
}
(_results 是 _resultsArray,_testphrases 是 _masterArray)
新的搜索条码:
-(void) searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText {
NSLog(@"clicked!");
if ([searchText length] == 0) {
[_results removeAllObjects];
[_results addObjectsFromArray:_testphrases];
} else {
[_results removeAllObjects];
for (NSDictionary * string in _testphrases) {
for (NSString *key in string) {
NSString *value = [string objectForKey:key];
NSRange r = [value rangeOfString:searchText options: NSCaseInsensitiveSearch];
if (r.location != NSNotFound) {
[_results addObject:string];
}}
}
}
[tableView reloadData];
}
这是搜索发生时的样子: http://imgur.com/a/jpvBi
最佳答案
如果您坚持使用 MVC 模式,您就不会遇到这个问题。您需要做的是为表的数据源准备一个对象数组。这样,您可以引用对象的名称/ID 而不是 indexPath.row。
像这样:
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:
(NSIndexPath *)indexPath
{
Object *object = [_filteredArray objectAtIndex:indexPath.row];
[self performSegueWithIdentifier:object.segueId sender:self];
}
编辑:很难为您提供帮助,因为您没有提供足够的实现信息/代码。因此,让我添加一个示例来说明如何完成此操作。
创建 2 个可变数组。 masterArray 和 resultsArray。 masterArray 将是我们的 tableview 主要数据源。 resultsArray 是用户搜索的内容。
使用自定义对象或简单的字典填充 masterArray。例如:
[_masterArray addObject:@{@"title":@"第一项", @"segueID":@"hello"}];[_masterArray addObject:@{@"title":@"第二项", @"segueID":@"hello1"}];
在这里您指定要将哪个 segue 绑定(bind)到哪个项目。
当用户搜索时,resultArray 应该是 _masterArray 的过滤结果,因此 resultArray 包含 masterArray 的子集,然后显示在表中。
然后在 tableview 的 didSelect delegate 中,您可以获取所选对象及其对应的 segueID 以执行 Segue。
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ NSDictionary *obj = [_resultArray objectAtIndex:indexPath.row]; [self performSegueWithIdentifier:[obj objectForKey:@"segueID"] sender:self];
EDIT2:如何使用数组中的数据填充单元格:
-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *cellID = @"yourCellID";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID];
if (cell==nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID];
}
if ([resultsArray count]>0) {
NSDictionary *item = [_resultsArray objectAtIndex:indexPath.row];
cell.titleLabel.text = [item objectForKey:@"title"];
} else {
NSDictionary *item = [_masterArray objectAtIndex:indexPath.row];
cell.titleLabel.text = [item objectForKey:@"title"];
}
return cell;
}
编辑 3:您要做的是直接获取键标题的值,而不是遍历键。这应该有效:
for (NSDictionary *dict in _testphrases) {
NSString *value = [dict objectForKey:@"title"];
NSRange r = [value rangeOfString:searchText options: NSCaseInsensitiveSearch];
if (r.location != NSNotFound) {
[_results addObject:dict];
}
}
关于ios - xCode Objective-C : Tapping UITableViewCells without indexPath. 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44534913/
有什么区别 $('.classname').on('click tap', function(){}); 在第二种情况下,事件之间有一个 OR 符号('||') $('.classname').on(
在我的完整日历中,我不想支持拖动选择。仅应在一个插槽中创建事件。在普通浏览器中它运行良好(我只是添加到选择 X 分钟)。我遇到的问题是,在移动设备上,您需要长按并拖动才能触发我的“添加事件”功能。 有
我有一组为 Jenkins 生成 JUnit 输出的脚本。 我执行的代码看起来像这样(这只是一个片段,所以你明白了): #!/usr/bin/env perl
我有一个 JQuery Mobile 页面,其中的内容是一个列表,用户可以在其中点击以选择(突出显示)元素。选择所需数量的列表元素后,可以通过点击页脚中的删除按钮将其删除。该页面在我的桌面上运行良好,
我正在使用 TAP-Windows(来自 OpenVPN 项目)创建一个界面,如所述 here和 here .我的代码基于第一篇文章中提供的示例: const string UsermodeDevic
我使用 TAP::Formatter::HTML 运行一些 TAP 测试。 这个 CPAN 模块生成漂亮的动态 HTML 报告,但我想使用通过测试、失败测试等的数量 - 在所有测试完成后将它们插入数据
我在应用程序中有一个按钮。我希望它根据我是点击它(暂停动画)还是双击(重新启动动画)来做不同的事情 但是,当我双击时,它似乎先触发点击事件,然后快速连续双击。有没有解决的办法?这是一个已知问题还是我犯
问题是关于要使用 Tun/Tap 模块的 Linux 主机的正确配置。 我的目标: 利用现有的路由软件(下文中的 APP1 和 APP2),但拦截和修改它发送和接收的所有消息(由 Mediator 完
我已阅读 SO question: Controller for Buttons Sencha Touch 2 [Solved]实现点击按钮。有用! 不幸的是,我需要点击容器,而不是按钮。一旦我改变x
我似乎无法让 heroku 到 db:push,即使我已经安装了水龙头。它似乎不相信我。我还检查并在这里找到了一个文件夹:/Library/Ruby/Gems/1.8/gems/taps-0.2.23
我正在使用 Appcelerator for Android 应用程序, 在我设置 accessibilityHint 属性后,Talkback 说完这个字符串,暂停并始终说“双击激活,双击并按住长按
我正在尝试通过 Tapinstall 在 Windows 中控制 OpenVPN TAP 驱动程序的多个实例。似乎因为所有设备都有相同的 HWID - 'tap0901' - 我无法使用 tapins
我对 JQuery 移动“点击”事件有一个真正的问题。它发射了两次,我似乎无法阻止它。 问题是我有一页index.html,当您点击按钮时,您会转到page2.html。问题是,当您快速点击时,您将移
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
我认为这将是一个奇怪的问题,但我想知道这是否可能。如果我正在使用一个我无法控制的库,如果它有一个具有虚函数的实体类,并且库本身正在创建这些实体,如 Entity* e = new Entity(),有
跟随 Apple 的 Guide to build a MealKeeper app ,我能够创建一个文本字段和一个 ImageView 。将 UITapGestureRecognizer 拖放到 I
我已经使用点击手势识别器制作了一个可点击的 View ,它工作得很好。但我想在触摸发生时突出显示 View ,并在触摸结束时将其删除。 我试过这个: - (IBAction)refresh:(UITa
有人能用简单的语言解释一下我们用来观察输出的普通可观察运算符和似乎具有相同功能的 do/tap 之间的区别吗?为什么我们要使用 do/tap? 最佳答案 RxJS v6+ 中的 do/tap 运算符或
我正在开发一个通过 Tap 阅读的程序。唯一的问题是,我不知道如何检测一个传输到分路器的结束和另一个传输的开始。 从水龙头读取数据的方式是否与 SOCK_STREAM 相同? 最佳答案 Tun/tap
这是我的简单测试代码: def test_function 0.tap do |v| v += 10 end end p test_function 为什么我在这里得到 0?我在等着得
我是一名优秀的程序员,十分优秀!