UITableview中的按钮修改当前单元格自定义

时间:2012-08-13 16:02:21

标签: ios uitableview uibutton

我找不到修改自定义单元格的解决方案,因为里面有一个按钮。我希望在单击按钮时更改标签文本。

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

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil];
}

// View
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 250)];
[view setBackgroundColor:[UIColor colorWithWhite:255.0 alpha:0.0]];

// Label
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320-7-7, 16)];
[label setText:@"Hello"];
[label setTextAlignment:UITextAlignmentLeft];
[label setTextColor:[UIColor grayColor]];
[label setFont:[UIFont fontWithName:@"HelveticaNeue-Bold" size:16]];
[label setBackgroundColor:[UIColor clearColor]];
[view addSubview:label];

// Action
UIButton *action = [[UIButton alloc] initWithFrame:CGRectMake(306-54, 0, 54, 54)];
[action setTitle:@"0" forState:UIControlStateNormal];
[action addTarget:self action:@selector(actionMore:) forControlEvents:UIControlEventTouchUpInside];
[view addSubview:action];

// Add view to cell
[cell addSubview:view];

return cell;
}

修改(添加详细信息)

- (void)actionMore:(id)sender{
UIButton *button = (UIButton *)sender;

// Edit current cell, but I do not know how...

}

感谢。

5 个答案:

答案 0 :(得分:4)

您可以使用以下代码行获取按下按钮的单元格

UITableViewCell * cell = (UITableViewCell*)[[sender superview] superview];

然后使用单元格引用更改标签文本

cell.yourlabel.text = @“新文字”;

<强>更新 我认为上面的代码可能无法在iOS 7中运行。更好的方法是

CGPoint buttonPosition = [sender convertPoint:CGPointZero toView:self.mainTable];
NSIndexPath *indexPath = [self.mainTable indexPathForRowAtPoint:buttonPosition];

答案 1 :(得分:1)

为了帮助您提供更多详细信息。

  1. 这是单个单元还是多个原型?
  2. actionMore:selector。
  3. 中的代码
  4. 你想要做什么?为什么单元格中的按钮会更改标签文本?
  5. 如果多次使用此单元格,则问题可能是actionMore:无法隔离哪个单元格是代码的目标。你也可以在actionMore方法中输入一个简单的拼写错误,但是如果不能看到所有相互作用的代码,我们就无法解决这个问题。

    如果您可以提供更多详细信息,则可以提供帮助。如果有更多信息,我可以帮助你,我会编辑这个答案。

    - 编辑 -

    首先获取可以使用的单元格:

    UITableViewCell * cell = (UITableViewCell*)[[sender superview] superview];
    

    然后您可以通过以下方式访问您的单元格标签:

    cell.label.text = @"Some Text Here";
    

    你的下一个问题是弄清楚你的细胞在列表中的位置。为此使用此代码:

    UITableView * table = (UITableView*)[[[sender superview] superview] superview];
    NSIndexPath * indexPath = [table indexPathForCell: cell];
    

    然后,您可以使用switch语句或if-else语句来查找触发的行。

答案 2 :(得分:1)

由于您的UIButtonUILabel是同一视图的子视图,因此您可以标记标签,并使用viewWithTag从按钮的操作代码中找到它:

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320-7-7, 16)];
label.tag = 1234;
....

- (void)actionMore:(id)sender{
    UIButton *button = (UIButton *)sender;
    UILabel *label = [[sender superview] viewWithTag:1234];
    // Edit current cell
}

答案 3 :(得分:0)

您最好将view添加为subview

contentview

indexpath传递给actionMore或从那里获取。一旦你得到indexpath,你就可以了。

您可能需要为textlabel设置一个标记,以便从superview中提取该标记。

答案 4 :(得分:0)

- (void)actionMore:(id)sender{
    UITableViewCell * cell = (UITableViewCell*)[[sender superview] superview];

    UIView *view = [cell.subviews objectAtIndex:0];
    UILabel *label = [view.subviews objectAtIndex:0];

    [label setText:@"test"];
}