tableviewcell的标记显示错误的值

时间:2012-08-05 08:41:47

标签: iphone ios5 xcode4.3

这是我到目前为止的表格视图

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

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

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:[CustomCell reuseIdentifier]];
    if (cell == nil)
    {
        [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil];
        cell = _customCell;
        _customCell = nil;
    }
    button.tag = indexPath.row;
    cell.titleLabel.text = [titleArray objectAtIndex:indexPath.row];
    cell.timerLabel.text =  [timeArray objectAtIndex:indexPath.row];
    time = [[secondArray objectAtIndex:indexPath.row] integerValue];
    NSLog(@"Title %@, time %@, second %@, time %i, tag %d", titleArray, timeArray, secondArray, time, button.tag);
    return cell;
}

这是我到目前为止制作的按钮

- (IBAction)onoffBtn:(id)sender
{
    NSIndexPath *indexPath = [_tableView indexPathForCell:(UITableViewCell*)[[sender superview] superview]];
    NSLog(@"My tag is %d time %i, tag %d",indexPath.row, time, button.tag);
}

当我运行它时,我为每个数据放置了3个具有不同值的单元格,我的日志如下所示

2012-08-05 16:32:59.224 Schedule[960:f803] Title (
    "Title 1",
    "Test 2",
    "Test 3"
), time (
    "5 secs",
    "10 secs",
    "15 secs"
), second (
    5,
    10,
    15
), time 15, tag 2

// after I push onoffBtn, my log is showing below

2012-08-05 16:33:01.409 Schedule[960:f803] My tag is 0 time 15, tag 2
2012-08-05 16:33:05.042 Schedule[960:f803] My tag is 1 time 15, tag 2
2012-08-05 16:33:07.113 Schedule[960:f803] My tag is 2 time 15, tag 2

对于标签,两个标签显示时间和标签的错误结果,即15和2.如何解决?如果您不介意,请提供代码和解释,因为我想了解。

1 个答案:

答案 0 :(得分:0)

出现问题的是您在XCode中的nib文件中使用自定义UITableViewCell创建了按钮,然后将该按钮连接到视图控制器类的属性。

这不会按照您想要的方式工作,因为您的班级中只有一个属性,但您的表中有很多行。所以你得到了你看到的症状。

Apple here推荐的技巧是为您在nib文件中添加的每个元素添加一个唯一标记(例如,您的按钮为标记1),然后使用viewWithTag:

获取它