4

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

- (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...

}

谢谢。

4

5 回答 5

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];
于 2012-08-13T16:38:55.897 回答
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
}
于 2012-08-13T16:39:31.177 回答
1

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

  1. 这是单个单元格还是多个单元格的原型?
  2. actionMore: 选择器中的代码。
  3. 你想这样做是为了什么?为什么要在单元格中添加一个按钮来更改标签文本?

如果此单元格被多次使用,则问题可能是 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 语句来查找触发了哪一行。

于 2012-08-13T16:20:14.087 回答
0

你最好添加viewsubviewcontentview

传递indexpathtoactionMore或从那里获取它。一旦你得到了 indexpath,你就在做生意。

您可能想为您设置一个标签,textlabel以便从其superview.

于 2012-08-13T16:43:03.383 回答
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"];
}
于 2012-08-13T18:46:05.917 回答