gpt4 book ai didi

iphone - UITableView 单元格中的 UIButton,如 "Delete Event"

转载 作者:行者123 更新时间:2023-12-03 18:33:49 26 4
gpt4 key购买 nike

我想向表格单元格添加一个按钮。日历应用中的“删除事件”启发了我...(类似的案例还有通讯录中的“共享联系人”)

目前有

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
//..yadayadayada
cell = [tableView dequeueReusableCellWithIdentifier:@"buttonCell"];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:@"buttonCell"] autorelease];
}
UIButton *button = [UIButton buttonWithType:UIButtonTypeInfoDark];
[button setBackgroundColor:[UIColor redColor]];
button.titleLabel.text = @"Foo Bar";
[cell.contentView addSubview:button];

它确实产生了一个按钮。它看起来还不是它应该的样子(显然我还没有处理过 iPhone 中的按钮),但这至少是正确的方法吗?

最佳答案

现在,每次显示单元格时,您都会分配一个按钮,设置其值,并将其添加到单元格的 contentView 中。当单元格被重用时(通过 dequeueReusableCellWithIdentifier),您将创建另一个新按钮,将其添加到单元格(在旧按钮的顶部)等。事实是它已经通过了 addSubview 但没有显式释放意味着每个按钮的保留计数永远不会为零,因此它们都会保留下来。上下滚动一段时间后,单元格最终会出现数百个按钮 subview ,这可能不是您想要的。

一些提示:

  • 切勿在 cellForRowAtIndexPath 调用中分配内容,除非在 dequeueReusableCellWithIdentifier 返回 nil 并且您正在初始化单元格时完成分配。随后的所有其他时间,您都将返回您已经设置的缓存单元格,因此您所要做的就是更改标签或图标。您需要将所有按钮分配内容移到单元格分配代码后面的 if 条件中。

  • 该按钮需要有一个位置和一个为其设置的目标,以便在点击时它会执行某些操作。如果每个单元格都将有此按钮,一个巧妙的技巧是让它们全部指向相同的目标方法,但将按钮的 tag 值设置为该按钮的 indexPath.row小区(在小区分配 block 之外,因为每个小区的情况不同)。按钮的常见点击处理程序将使用发送者的标记值来查找数据源列表中的基础数据。

  • 完成 addSubview 后,在按钮上调用 release。这样,保留计数将降至零,并且当父对象被释放时,该对象实际上将被释放。

  • 您可以将其作为单元格的 accessoryView 返回,而不是通过 addSubview 添加按钮,这样您就不必担心其定位问题(除非您已经将accessoryView用于其他用途——例如披露按钮)。

关于iphone - UITableView 单元格中的 UIButton,如 "Delete Event",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1076785/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com