0

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

- (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。如何解决?如果您不介意,请提供代码和解释,因为我想了解。

4

1 回答 1

0

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

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

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

于 2012-08-05T09:39:36.247 回答