UITableView didSelectRowAtIndexPath:不工作

时间:2011-11-18 06:58:15

标签: iphone objective-c ios xcode uitableview

当我选择表格行时,没有任何反应。它没有转到ContentController,当我想将它链接到UILabel时,我找不到我在ContentController.h上声明的resultLabel

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    ContentController *detailview = [[ContentController alloc] initWithNibName:@"ContentController" bundle:nil];    
    detailview.detailString = [NSString stringWithFormat:@"%d",indexPath.row];
    [self.navigationController pushViewController:detailview animated:YES];     
    [detailview release];
}

ContentController

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    resultLabel.text = self.detailString;
}

11 个答案:

答案 0 :(得分:15)

这可能是因为您没有将表格视图属性设置为委托&数据源:

tableview.delegate=self;
tableview.datasource=self;

或在xib中设置其属性是另一种选择

答案 1 :(得分:3)

clickable == NO

可以是方法cellForRowAtIndexPath中的状态:

cell = [self tableCellWithHeight:height clickable:NO withArrowAccessory:NO];

if clickable == NO然后didSelectRowAtIndexPath方法永远不会调用该单元格。

答案 2 :(得分:2)

要检查的另一件事是确保原型单元格及其选择模式或选择样式。

转到界面构建器>>>右侧的实用窗口>>>属性检查器>>>查找选择下拉列表。

在我关注的苹果教程中,它要求您将其设置为none,使其看起来像didSelect'委托没有触发。将选择模式设置为none,有效地扼杀了这种能力。我将其更改为单选,这一切都开始重新开始了。

答案 3 :(得分:0)

检查是否正在使用断点的didSelectRowAtIndexPath内部进行控制。如果不是只检查是否已设置UITableView委托。

答案 4 :(得分:0)

在ContentController.h中

NSString *detailString;

@property (nonatomic, retain) detailString;

ContentController.m

@synthesize detailString;

在你班上有桌面视图的地方。设置表视图委托& datasource to self(在xib中为文件所有者)。

答案 5 :(得分:0)

以下是在UITableview的界面构建器中设置数据源和委托的图像 这对于下面触摸的方法是必要的。

...

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

                - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
                {
                    return [self.myAlphabet count];
                }

                - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
                {
                    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];    
                    cell.textLabel.text = [self.myAlphabet objectAtIndex:indexPath.row];
                    return cell;
                }

                - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
                {
                    //method for getting text (can be changed to push views)
                    NSString*mystring;
                    mystring = [self.tableView cellForRowAtIndexPath:indexPath].textLabel.text;
                    NSLog(@"%@",mystring);    
                }

Setting datasource and delegate in interface builder

答案 6 :(得分:0)

创建单元格时(在cellForRowAtIndexPath上)应注意:

userInteractionEnabled属性  确定是否可以选择单元格(单击时应该-didSelectRowAtIndexPath将调用)。

if (!isClickable) {
    cell.userInteractionEnabled = NO;
}

selectionStyle属性:  确定单击时是否显示所选的背景视图。

cell.selectionStyle = isClickable ? UITableViewCellSelectionStyleBlue : UITableViewCellSelectionStyleNone;

答案 7 :(得分:0)

嗯,我有一些不同的情况,我在HJManaged单元格中有UITableView图片,而HJManaged图片在其delegate中有自己的点按方法,所以当我点按表格视图而不是didSelectRowAtIndexPath,委托调用HJManaged图片的点击方法。

所以我找到了解决方案,我回到了UITableView Cell,并且取消选中HJManaged图片的用户互动功能。

答案 8 :(得分:0)

检查您是否实施此方法

- (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath: (NSIndexPath *)indexPath
{
     return NO;
}

禁用单元格选择

答案 9 :(得分:0)

这种情况可能是您没有添加表视图委托和数据源。请确保并在视图中添加这两行并加载方法

if ( ( @start < @to ) and ( @end > @from ) )
  return @to - @start

答案 10 :(得分:0)

我的情况是我忘了设置tableView的委托属性。也许你应该将tableView委托连接到当前的视图控制器。