我想装饰tableViewCells并向某个单元格的内容视图添加一个按钮。 我希望下面的这段代码能够做到这一点。但是,我无法在contentView或accessoryView上观察该按钮。
我的调试过程中的另一个问题是,当我使用以下行打印tableViewCells的x和y位置时:NSLog(@"Cell frame origin x: %f y: %f", cell.frame.origin.x, cell.frame.origin.y);
我得到输出:
origin x: 0.000000 y: 0.000000
origin x: 0.000000 y: 0.000000
origin x: 0.000000 y: 0.000000
请注意,destinationName
数组有三个项目。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
// define the cell identifier
static NSString *cellIdentifier = @"SettingsCell";
// get the cell
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
// set the content of each cell
NSString *route = [destinationName objectAtIndex:indexPath.row];
[cell.textLabel setText:route];
[cell.detailTextLabel setText:[originName objectAtIndex:indexPath.row]];
//define a button
UIButton *btn=[UIButton buttonWithType:UIButtonTypeCustom];
[btn setFrame:CGRectMake(cell.frame.origin.x + 100 ,
cell.frame.origin.y + 5,
40, 30)];
NSLog(@"Cell frame origin x: %f y: %f", cell.frame.origin.x, cell.frame.origin.y);
//Output for this code is: origin x: 0.000000 y: 0.000000
[btn setTag:indexPath.row];
[btn setTitle:@"Btn" forState:UIControlStateNormal];
// Add this button to the contentView of the cell
[cell.contentView addSubview:btn];
//[cell.accessoryView addSubview:btn];
return cell;
}
如何成功将按钮放在tableViewCell的contentView上?
答案 0 :(得分:0)
答案 1 :(得分:0)
我从blog post解决了我的问题。
答案 2 :(得分:-1)
第一件事:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
在第一次运行中,当没有单元格出队时 - 返回“nil”。 你必须处理它并创建新的单元格。
if(cell == nil)
{
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
第二件事是 - 如果单元格将被出列(如果您在可见范围之外滚动表视图并返回) - 您的代码将始终添加一个子视图 - 多次到同一个重用的单元格。更好的方法是在初始化时创建自定义类并添加子视图。如果你想要快捷方式 - 在上面的代码块中执行if if(cell === nil) - 当你创建新实例时。
在该函数中你刚刚创建了一个单元格 - 它将返回到tableview,它要求它 - 只是你可以尝试跟踪x,y坐标。
以上所有内容都包含在该代码中:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
// define the cell identifier
static NSString *cellIdentifier = @"SettingsCell";
// get the cell
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if(cell == nil)
{
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
//define a button
UIButton *btn=[UIButton buttonWithType:UIButtonTypeCustom];
[btn setFrame:CGRectMake(100,5, 40, 30)]; //coordinates are x,y inside cell - top-left is 0,0
//Output for this code is: origin x: 0.000000 y: 0.000000
[btn setTag:indexPath.row];
[btn setTitle:@"Btn" forState:UIControlStateNormal];
// Add this button to the contentView of the cell
[cell.contentView addSubview:btn];
}
// set the content of each cell
NSString *route = [destinationName objectAtIndex:indexPath.row];
[cell.textLabel setText:route];
[cell.detailTextLabel setText:[originName objectAtIndex:indexPath.row]];
return cell;
}