故事板的动态原型自定义单元格包含系统UIButton
。
我在cellForRowAtIndexPath
中设置了按钮的标题:
NSInteger votesCount = verse.helpfulVotesCount.integerValue;
NSString *votes = [NSString stringWithFormat:@"%ld helpful vote%@", (unsigned long)votesCount, votesCount == 1 ? @"" : @"s"];
[cell.detailButton setTitle:votes forState:UIControlStateNormal];
最初所有内容都显示正常,直到单元格在屏幕外滚动。此时,重复使用的单元格按钮标题不再可见。
我查了一下:
自定义单元格的按钮属性,包括其frame
。它的位置和大小都是正确的。
按钮的state
,titleForState
和titleColorForState
。它有标题和标题颜色,但标题不再可见。
我尝试过的事情:
将按钮类型从“系统”更改为“自定义”。按钮标题仍然消失。
设置按钮的背景颜色。背景显示,标题的高度和宽度正确,但标题本身不可见。
为什么滚动后按钮标题会消失?
更新
答案 0 :(得分:0)
我认为你在不知道的情况下混合细胞样式。
没有代码可供我们查看...
所以让我展示一种方法来解决它...
仅使用一种单元格样式并使用标签。
(您可以使用多个单元格样式,但每种单元格样式都有不同的dequeueReusableCellWithIdentifier)
我正在使用动态原型单元格
单元格样式设置为自定义
我尝试使用与你相同的布局
我向按钮提供了201
的标签我还使用有用的投票标签来显示该行 在IB中,我给它标记了202
所有内容都在故事板中创建 我只是在cellForRowAtIndexPath中使用引用:
我还创建了一个@IBAction doSomething,
证明我们可以跟踪点击哪个按钮。
图片链接:http://tinypic.com/r/1yl1l4/8
- (IBAction)doSomething:(UIButton*)sender {
NSLog(@"Button row clicked: %ld",(long)sender.titleLabel.tag);
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];
// Configure the cell...
NSInteger votesCount = indexPath.row;
NSString *votes =
[NSString stringWithFormat:@"%ld helpful vote%@",
(unsigned long)votesCount, votesCount == 1 ? @"" : @"s"];
UILabel *helpfulVotes = (UILabel *)[cell viewWithTag:202];
[helpfulVotes setText:votes];
UIButton *detailButton = (UIButton *)[cell viewWithTag:201];
[detailButton setTitle:votes forState:UIControlStateNormal];
//save indexPath.row inside this tag
detailButton.titleLabel.tag = indexPath.row;
return cell;
}
Swift版本,就像俚语Objective-C:
@IBAction func doSomething(sender: UIButton) {
if let tag = sender.titleLabel?.tag {
println("row:\(tag)")
}
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as UITableViewCell
// Configure the cell...
var someTitle = cell.viewWithTag(202) as UILabel
someTitle.text = "Row \(indexPath.row):00"
var detailButton = cell.viewWithTag(201) as UIButton
//save indexPath.row inside this tag
detailButton.titleLabel?.tag = indexPath.row
detailButton.setTitle("Button:\(indexPath.row)",
forState: UIControlState.Normal)
return cell
}