[英]-didSelectRowAtIndexPath: not being called in UITableView
[英]UITableView didSelectRowAtIndexPath not being called
我有一個帶有 UITableView 的視圖控制器。 我將數據源和委托都設置為視圖控制器。 方法 cellForRowAtIndexPath: 正在被調用並按預期運行,但是 didSelectRowAtIndexPath: 沒有被調用。 任何想法這里發生了什么?
我的 .h 中有這個:
@interface DetailViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>
在我的 viewDidLoad 在 .m 我有:
self.tableView.dataSource=self;
self.tableView.delegate=self;
將調用 cellForRowAtIndexPath 但不調用 didSelectRowAtIndexPath 似乎沒有意義。這就是該方法現在的樣子:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
NSLog(@"did select row at index path");
}
我遇到了一些可能的原因:
確保 tableView 的編輯屬性設置為 NO。 當表的編輯屬性設置為 YES 時,不會調用didSelectRowAtIndex: 方法。 默認情況下,此屬性設置為 NO。
self.tableView.editing = NO;
確保allowsSelection 屬性設置為YES。 默認情況下是。
試着打電話。 [super viewDidLoad]在 viewDidLoad 方法中或在 init 初始化器中設置委托和數據源屬性。
在loadView方法中設置delegate 和dataSource 屬性,並將tableView 分配給UIViewController 的view 屬性。 下面是一個例子:
- (void)loadView { UITableView *tableView = [[UITableView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame] style:UITableViewStylePlain]; tableView.autoresizingMask = UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth; tableView.delegate = self; tableView.dataSource = self; [tableView reloadData]; self.view = tableView; }
(這實際上是我通常做的)嘗試從 UITableViewController 繼承 DetailViewController ,它也繼承自 UIViewController 。 UITableViewController 自動符合 UITableViewDelegate 和 UITableViewDataSource。
視圖控制器視圖上的手勢識別器阻止了觸摸,通過將手勢識別器的cancelsTouchesInView
設置為 false 來解決。
就我而言,我使用了 UITapGestureRecognizer,它對我來說就像魔法一樣。
cell.tag=indexPath.row;
UITapGestureRecognizer* tap=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapOnCell:)];
[cell addGestureRecognizer:tap];
這是我的 tapOnCell 方法實現
-(void)tapOnCell:(UITapGestureRecognizer*)tap
{
ADPointCashTransaction* aTransaction=[transactionArray objectAtIndex:tap.view.tag];
// Work with aTransaction Object
}
將答案放在 seto nugroho 的評論中,以及我解決該問題的工作。 如果 tableView 中有手勢識別器,則不會調用 didSelect 行。 您可以做的是將手勢識別器的點擊次數增加到兩次。
let gestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(dismissKeyboard))
gestureRecognizer.numberOfTapsRequired = 2
view.addGestureRecognizer(gestureRecognizer)`
我再添加一個:確保您沒有任何其他視圖與表格或單元格重疊,即使是隱藏的。 如果這樣做,請在情節提要中禁用“啟用用戶交互”,除非您明確需要通過視圖捕捉手勢。
就我而言,我在后台線程中分配了 dataSource 並調用了 reloadData() 。 因此,請確保您在主線程上執行此操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.