Mat*_*rle 288 cocoa-touch uitableview didselectrowatindexpath ios
我正在选项卡视图中编写一个带有表格视图的iOS应用程序.在我UITableViewController
,我实现了-tableView:didSelectRowAtIndexPath:
,但是当我在运行时选择一行时,该方法没有被调用.正在填充表视图,所以我知道我的控制器中正在调用其他tableView方法.
有没有人有任何想法,我可能搞砸了,以实现这一目标?
CGe*_*Gee 534
以防万一有人像我一样犯了同样的愚蠢错误:
检查您didSelect
可能会didDeselect
以某种方式意外获取您所期望的方法名称.我花了大约两个小时才发现......
Den*_*rut 494
可能导致该问题的另一个问题是未选择的选择类型:
应该是Single Selection
正常选择,不应该No Selection
.
Old*_*her 150
所有好的答案,但还有一个值得关注......
(特别是以编程方式创建UITableView时)
确保tableView可以通过设置[tableView setAllowsSelection:YES];
或删除任何设置它的行来响应选择NO
.
Hun*_*ter 96
听起来这个类可能不是UITableViewDelegate
那个表视图,但UITableViewController
应该自动设置.
您是否有机会将委托重置为其他课程?
Bar*_*zyk 88
如果出现问题,UITapGestureRecognizer
您可以解决此问题:
在代码中Objective-C
:
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)];
[self.view addGestureRecognizer:tap];
[tap setCancelsTouchesInView:NO];
Run Code Online (Sandbox Code Playgroud)
在代码中Swift
:
let tap = UITapGestureRecognizer(target: self, action:Selector("dismissKeyboard"))
view.addGestureRecognizer(tap)
tap.cancelsTouchesInView = false
Run Code Online (Sandbox Code Playgroud)
gil*_*ilm 66
在这种情况下我遇到过两件事.
您可能忘记实现UITableViewDelegate协议,或者您的类和表视图之间没有委托出口.
您可能在行内有一个UIView作为第一响应者,并且可以消除您的点击.说一个UIButton或类似的东西.
Jac*_*rse 44
我曾经也有过一样的问题.而且很难找到.但在我的代码中的某处是:
- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
return nil;
}
Run Code Online (Sandbox Code Playgroud)
必须是return indexPath
,否则-tableView:didSelectRowAtIndexPath:
就不会被召唤.
Vin*_*ose 37
如果您在UITableView上添加了gestureRecognizer,didSelectRowAtIndexPath
则不会被调用.
因此,您需要使用gestureRecognizer委托方法来避免在特定视图中触摸.
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
if ([touch.view isDescendantOfView:YourTable]) {
return NO;
}
return YES;
}
Run Code Online (Sandbox Code Playgroud)
cpt*_*1nd 28
我遇到了一个问题,经过几个月没看到我的代码后,我忘记了由于一些不必要的要求,我实施了以下方法
- (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath{
return NO;
}
Run Code Online (Sandbox Code Playgroud)
它应该为一行返回YES以使其被选中.
spi*_*irs 19
如果您遇到与我相同的问题:显然,如果您的tableView处于编辑模式,则不会调用此方法.您必须将allowsSelectionDuringEditing设置为true.
通过这个问题:编辑时,`UITableView`不会调用didSelectRowAtIndexPath ??
Jey*_*mov 19
我有同样的问题,
原因是使用UITapGestureRecognizer
.当我在其他任何地方拍摄时,我希望键盘能够解散.我意识到这会覆盖所有tap操作,这就是为什么didSelectRowAtIndexPath
函数没有调用.
当我评论与之相关的行时UITapGestureRecognizer
,它可以工作.此外,您可以检查UITapGestureRecognizer selector
轻敲的功能UITableViewCell
.
And*_*ter 10
即使已经接受了另一个答案,我还会为观察此问题的人添加一个可能的问题和解决方案:
如果启用了自动引用计数(ARC),您可能会发现即使在将控制器指定为视图的委托之后,由于ARC正在删除控制器,因此未向控制器发送视图的消息.显然,UITableView的委托指针不算作ARC的引用,因此如果它是对它的唯一引用,则控制器将被解除分配.您可以通过在控制器上实现dealloc方法并在那里设置断点或NSLog调用来验证是否发生了这种情况.
解决方案是通过其他地方的强引用来跟踪控制器,直到您确定不再需要它为止.
Car*_*los 10
请记住在viewDidLoad方法中设置数据源和委托,如下所示:
[self.tableView setDelegate:self];
[self.tableView setDataSource:self];
Run Code Online (Sandbox Code Playgroud)
我的问题不是上述问题.太蹩脚了.但我想我会把它列在这里,以防它帮助某人.
我有一个tableViewController
是我的"基础"控制器,然后我创建了这个控制器的子类.我tableView:didSelectRowAtIndexPath
在"基础"类的例程中编写了所有代码.完全忘记了默认情况下,我的所有子类中也创建了这个例程(尽管没有任何代码可以做任何事情).因此,当我运行我的应用程序时,它运行代码的子类版本,什么也没做,让我伤心.所以当然,一旦我从子类中删除了例程,它就使用了mt"base"类例程,而且我在做生意.
我知道.不要笑.但也许这会在我失去的时刻拯救某人......
给我2美分.
我有一个自定义UITableViewCell,并且有一个按钮覆盖整个单元格,所以当触摸发生时,按钮被选中而不是单元格.
删除按钮或在我的情况下,我在按钮上将User Interation Enable设置为false,这样单元格就是选中的单元格.
小智 7
我刚刚拥有这个,并且在过去发生在我身上它没有用,因为我在尝试添加方法时没有注意自动完成,而我实际上最终实现了tableView:didDeselectRowAtIndexPath
:而不是tableView:didSelectRowAtIndexPath:
.
小智 5
我知道是老问题得到解决,但也有类似的问题,我认为这个问题是我的自定义的UITableViewCell,但解决方案是完全不同 - 我重新启动的XCode :),然后工程确定!几乎像Windows :)
确保您实施了tableView:didSelectRowAtIndexPath
而不是tableView:didDeSelectRowAtIndexPath
这是不止几次让我着迷的!!
如果您的表视图处于编辑模式(例如[tableView setEditing:YES animated:NO];
),则需要进行设置tableView.allowsSelectionDuringEditing = YES;
小智 5
在我的情况下,解决方案是在下面的函数中将 NO 更改为 YES。
iOS 9+
- (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath
{
return YES;
}
Run Code Online (Sandbox Code Playgroud)
检查您viewController
是否有以下方法:
- (BOOL) tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath {
return NO;
}
Run Code Online (Sandbox Code Playgroud)
如果您返回“NO”,则不会调用 didSelectRow
请检查 UITapGestureRecognizer。在我的情况下,为放置 tableview 的视图添加了 Tapgesture,这会像 didselect 一样消耗 UITableview 的用户交互。禁用视图的 tapgesture 后,didselect 委托被触发。
归档时间: |
|
查看次数: |
202388 次 |
最近记录: |