在UITableView中没有调用didSelectRowAtIndexPath

时间:2013-11-11 18:33:27

标签: ios uitableview

我有一个UITableView按下时,应该按下另一个视图控制器但是didSelectRowAtIndexPath没有被调用。我正在使用另一个视图控制器PhotoCell,广告单元格有任何影响。提前致谢!这是表格的代码。

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    //    NSInteger sections = self.objects.count;
    //    if (self.paginationEnabled && sections != 0)
    //        sections++;
    //    return sections;
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return 1;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
//    if (indexPath.section >= self.objects.count) {
//        // Load More Section
//        return 320.0f;
//    }
//    
    return 320.0f;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"PhotoCell";
    PhotoCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell==nil) {
        cell = [[PhotoCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];

    }

    [cell setThumbImage:self.thumbImage];
    cell.imageView.image = self.thumbImage;
    [cell setExclusiveTouch:YES];
    return cell;
}

//this is what i need to look at

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    DetailViewController *detailsViewController = [[DetailViewController alloc] init];
    [self.navigationController pushViewController:detailsViewController animated:YES];

    NSLog(@"Pushing row at index path");
}

这是我定义表格的地方

[self.tableView registerClass: [PhotoCell class] forCellReuseIdentifier:@"PhotoCell"];
self.tableView = [[[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 568) style:UITableViewStylePlain] autorelease];
[self.tableView setDelegate: self];
[self.tableView setDataSource:self];
[self.scrollView addSubview:self.tableView];
self.tableView.separatorColor = [UIColor clearColor];

3 个答案:

答案 0 :(得分:3)

假设您在界面构建器中设置了推送segue,我将继续盲目猜测。

在这种情况下,当触发segue时不会调用tableView:didSelectRowAtIndexPath:。如果你需要在segue执行之前做额外的设置,你可以实现  prepareForSegue:sender:

答案 1 :(得分:1)

在我的情况下,问题在于选择属性是"没有选择"。当我从'#34;没有选择"对于任何其他值,didSelectRowAtIndexPath方法开始工作。 enter image description here

答案 2 :(得分:0)

很难说确切的原因,但有些事情要尝试:

  1. 您正在创建一个tableView,但由于某种原因,它不会调用delegate&数据源方法。首先在创建UITableView的行之间放置一个断点,并确保程序运行该代码。
  2. 您是否正在为该ViewController使用IB? xib文件上有UITableView吗?因为您以编程方式创建UITableView,所以一个UITableView可能位于另一个之上。使用IB几乎总是更容易。
  3. 从UIScrollView中删除tableView。我不知道这里的确切架构,但是两个相互叠加的滚动视图从来都不是一个好主意并且总是会导致问题(在堆栈溢出时在UIScrollView上搜索UITableView,你会看到)。请记住,UITableView本身就是一个UIScrollView。
  4. 从您的手机中移除exclusiveTouch,这可能也会导致问题
  5. 尝试删除自动释放声明。您没有使用ARC,因此请在dealloc方法中释放tableView。也可以使用[_tableView release]而不是[self.tableView release]。