UIButtons 不会显示在我的 UITableView 中
Posted
技术标签:
【中文标题】UIButtons 不会显示在我的 UITableView 中【英文标题】:UIButtons won't display in my UITableView 【发布时间】:2015-12-11 19:34:20 【问题描述】:所以我在 UITableView 的 CustomCell 类中的 UILabel 下有 UIButtons。我得到了要显示的标签,但似乎无法显示按钮。我为自定义单元格中的所有 3 个 UI 元素设置了全方位的约束。
我还记录了每个按钮的框架,它们似乎在我的单元格的框架内。
这是我的故事板和 ios 模拟器的屏幕截图:
这是我用来设置每个单元格的代码
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
return [_questions count];
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
CustomCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"CustomCell"];
cell.questionLabel.text = _questions[indexPath.row];
cell.questionLabel.numberOfLines = 0;
cell.disagreeButton.tag = indexPath.row;
cell.agreeButton.tag = indexPath.row + 60;
[cell.contentView addSubview:[cell.disagreeButton viewWithTag:indexPath.row]];
[cell.contentView addSubview:[cell.agreeButton viewWithTag:indexPath.row + 60]];
[cell.disagreeButton addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
[cell.agreeButton addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
NSLog(@"Button 1 Frame: %@\n", cell.disagreeButton);
NSLog(@"Button 2 Frame: %@\n", cell.agreeButton);
NSLog(@"Cell Frame: %@\n", cell);
return cell;
- (void)buttonClicked:(id)sender
UIButton *senderButton = (UIButton *)sender;
if (senderButton.tag < 60)
NSLog(@"Disagree Selected\n");
else
NSLog(@"Agree Selected\n");
我的 CustomCell.h
#import "UIKit/UIKit.h"
@interface CustomCell : UITableViewCell
@property (weak, nonatomic) IBOutlet UILabel* questionLabel;
@property (weak, nonatomic) IBOutlet UIButton* disagreeButton;
@property (weak, nonatomic) IBOutlet UIButton* agreeButton;
@end
【问题讨论】:
【参考方案1】:[cell.contentView addSubview:[cell.disagreeButton viewWithTag:indexPath.row]];
[cell.contentView addSubview:[cell.agreeButton viewWithTag:indexPath.row + 60]];
[cell.disagreeButton addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
[cell.agreeButton addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
删除这些行并查看。当您为单元格提供自定义类时,您不必再次 subView。
【讨论】:
【参考方案2】:如果您使用自定义类,则无需将按钮添加为子视图。但是,如果您想使用标签将按钮添加为子视图,请使用 -
[cell.contentView addSubview:[cell viewWithTag:indexPath.row]];
和
[cell.contentView addSubview:[cell viewWithTag:indexPath.row + 60]];
【讨论】:
【参考方案3】:显示单元格的高度似乎太小而无法显示按钮,因此按钮被切断了。尝试实现这个方法:
func tableView(_ tableView: UITableView,heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat
return 300
尝试使用 300 作为单元格的高度。如果您可以看到按钮,则可以返回正确的单元格高度。
【讨论】:
以上是关于UIButtons 不会显示在我的 UITableView 中的主要内容,如果未能解决你的问题,请参考以下文章
使用 IOS9 时,无法在 UITable 的部分标题上的 UIButtons 上触发触摸事件(IOS10 很好)
带有 UIButtons 的 UIScrollView - 当按钮开始触摸时,滚动视图不会滚动
显示 UILabels 和 UIButtons 相互内联的方法