-3

我的 tableView 没有触发 didSelectRowAtIndexPath 方法时遇到问题。我已经这样实现了代表:

@interface ViewController : UIViewController<UITableViewDataSource, UITableViewDelegate,UIScrollViewDelegate>

在我的故事板中,tableView 的数据源和委托都指向基础视图控制器。我启用了用户交互以及将选择设置为单选,这不是 TapGesture 问题,因为我的点击手势没有绑定到视图并且我已经检查并且它们没有触发。

这是设置表的代码:

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return menuArray.count;
}
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
    return 1;
}
-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"menuCell"];
    NSDictionary *menuItem = [menuArray objectAtIndex:indexPath.row];

    cell.textLabel.text = menuItem[@"Title"];
    cell.detailTextLabel.text = menuItem[@"Subtitle"];
    return cell;
}
-(void)showMenu{
    [UIView animateWithDuration:.25 animations:^{
        [content setFrame:CGRectMake(menuTable.frame.size.width, content.frame.origin.y, content.frame.size.width, content.frame.size.height)];
    }];
}
-(void)hideMenu{
    [UIView animateWithDuration:.25 animations:^{
    [content setFrame:CGRectMake(0, content.frame.origin.y, content.frame.size.width,     content.frame.size.height)];
    }];
}
-(IBAction)showMenuDown:(id)sender {
    if(content.frame.origin.x == 0)
        [self showMenu];
    else
        [self hideMenu];
}
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    //whatever
}

该表最初在情节提要上看不到(origin.x 设置为 -150),然后当用户单击导航栏中的按钮时,视图滑过以显示它,这可能是导致问题的原因思考。

我的代码或实现有什么问题会导致它不起作用吗?

4

2 回答 2

0
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"menuCell"];

如果从未创建单元格,这将返回 nil。

因此检查单元格是否为 nil 是强制性的,如果是,则需要创建一个单元格。

static NSString *CellIdentifier = @"menuCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if(cell == nil) {
    cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
}

当您使用情节提要时,您也可以使用

UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 

对于原型细胞。确保您在情节提要中使用相同的标识符并且您注册了单元格的类

- (void) viewDidLoad {
   [super viewDidLoad];

   [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"menuCell"];
} 
于 2013-08-26T20:41:00.367 回答
0

如果您已经看到您的表中填充了字典中的值,那么您可以排除数据源和委托是问题所在。即您的故事板连接正在工作。

你的代码对我来说看起来不错。我看到的唯一区别是我通常这样定义我的表。试试这个,看看它是否有帮助。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    //NSLog(@"Inside cellForRowAtIndexPath");

    static NSString *CellIdentifier = @"Cell";

    // Try to retrieve from the table view a now-unused cell with the given identifier.
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    // If no cell is available, create a new one using the given identifier.
    if (cell == nil)
    {
        // Use the default cell style.
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

//Your code here
// ....

return cell;

}
于 2013-08-26T20:29:51.517 回答