如何在 UITableView Cell 中以编程方式创建 n 个 UIButton?
Posted
技术标签:
【中文标题】如何在 UITableView Cell 中以编程方式创建 n 个 UIButton?【英文标题】:How to create n number of UIButton programmatically in UITableView Cell? 【发布时间】:2015-11-03 10:38:28 【问题描述】:我正在尝试创建一个带有 n 个按钮的 UITableView
,这取决于后端 JSON 数据。
我附上了一张图片,我知道如何在 UITableViewCell
上创建 UIButtons,但我不知道如何将它们正确放置在 UITableViewCell
中。
UIButton
为UITableViewCell
UIButton *continuebtn = [[UIButton alloc]initWithFrame:CGRectMake(10, 100, view1.frame.size.width-20, 40)];
[continuebtn setBackgroundColor:[UIColor grayColor]];
[continuebtn setTitle:@"Continue" forState:UIControlStateNormal];
continuebtn.layer.cornerRadius = 10;
continuebtn.layer.borderWidth =1.0;
continuebtn.layer.borderColor = [UIColor blackColor].CGColor;
[continuebtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
如何在UITableViewCell
上放置“n”个UIButton
?? UIButton
宽度取决于它的文字内容
【问题讨论】:
单元格可以水平滚动吗? 不,不是这样,但单元格高度应该增加以自动适应所有按钮..这就是问题 所以你得到的数据是你想添加多少个按钮,比如 3、4、5 等? 每个按钮将被放置为水平板,或者它们将像在集合视图中一样排列? 是的,然后我将使用 for 循环来生成 UIButtons 【参考方案1】:如果您想在单元格中垂直放置按钮,请使用以下建议:
UITableviewCell
的高度取决于按钮的数量。实现heightForRowAtIndexPath
方法如下:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
return 100.0f + (buttonsArray.count*buttonHeight+buttonsHeightSeparator);
//change 100.0f with height that is required for cell without buttons
//buttonHeight is a static float representing value for height of each button
//buttonHeightSeparator is a static float representing separation distance between two buttons
在您的cellForRowAtIndexPath
方法中,您可以使用以下代码创建按钮:
for(int i=0; i<buttonsArray.count; i++)
UIButton *continuebtn = [[UIButton alloc]initWithFrame:CGRectMake(10, 100+i*(buttonHeight+buttonsHeightSeparator), view1.frame.size.width-20, 40)];
[continuebtn setBackgroundColor:[UIColor grayColor]];
[continuebtn setTitle:@"Continue" forState:UIControlStateNormal];
continuebtn.layer.cornerRadius = 10;
continuebtn.layer.borderWidth =1.0;
continuebtn.layer.borderColor = [UIColor blackColor].CGColor;
[continuebtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
[continuebtn addTarget:self action:@selector(continueBtnPressed:) forControlEvents:UIControlEventTouchUpInside]; //add target to receive button tap event
[continuebtn setTag:i]; //to identify button
[cell.contentView addSubview:continuebtn]; //add button to cell
【讨论】:
如果我的 UITableView 单元格中的 UIButton 数量不同,那么应该创建多个部分还是应该检查 UITableview 中的 indexpath.row? 在heightForRowAtIndexPath
和 cellForRowAtIndexPath
方法中检查 indexPath.row 以在不同的单元格中创建按钮。
这会创建垂直独立于文本大小的按钮【参考方案2】:
我自己找到了更好的答案。 请检查此代码。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];
[cell addSubview:[self addView:indexPath.row]];
return cell;
-(UIView *)addView:(NSInteger)row
UIView *progView;
progView = [[UIView alloc] initWithFrame:CGRectMake(0, 0,cell.frame.size.width,cell.frame.size.height)];
progView.backgroundColor = [UIColor grayColor];
progView.tag = i;
progView.autoresizingMask = (UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin);
int x,y;
x=10;y=10;
for(int i=0;i<10;i++)
UIButton *button = [[UIButton alloc]init];
NSString *myString=@"Dynamic";
[button setTitle:myString forState:UIControlStateNormal];
CGSize stringsize = [myString sizeWithFont:[UIFont systemFontOfSize:14]];
[button setFrame:CGRectMake(x,y,stringsize.width+40, stringsize.height+20)];
x+=stringsize.width+50;
NSLog(@"%d-%f",x,progView.frame.size.width);
if(x>progView.frame.size.width)
y+=50;
x=10;
button.layer.borderWidth =1.0;
button.layer.borderColor = [UIColor greenColor].CGColor;
[button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
[button setTag:i];
[progView addSubview:button];
return progView;
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
return 200;
【讨论】:
返回单元格高度为 200 的恒定值,如果有更多超过 200 大小的按钮,这不会截断您的单元格吗?以上是关于如何在 UITableView Cell 中以编程方式创建 n 个 UIButton?的主要内容,如果未能解决你的问题,请参考以下文章
UITableView自定义Cell中,纯代码编程动态获取高度
如何从按钮单击中获取 UITableview cell.textlabel.text 值?
在 UITableViewController 中以编程方式切换 UITableView
如何在 Swift 4 中以编程方式注册 UITableViewHeaderFooterView?
以编程方式将 UISearchBar 添加到普通 ViewController 中以编程方式添加的 UITableView