【问题标题】:How to manage selected cell如何管理选定的单元格
【发布时间】:2014-01-20 19:59:46
【问题描述】:

我正在构建一个博客阅读器应用,其中包含 NSArray 中的帖子对象列表。

cell.postTitle.text=post.Title;

我正在尝试找出哪个帖子已被选中,然后将相应的cell.postTitle.text 设置为较浅的字体。

当导航控制器重新回到顶层(并被销毁?)时,我必须以某种方式记住这个状态。

谁能告诉我最好的方法?每个 post 对象都有一个 postID。也许我可以将它存储在 NSUserDefault 中,但是随着时间的推移,读取的 postID 列表可能会变得太大。

还有didSelectRowAtIndexPath 但是在这种方法中,我不能直接访问单元格属性对吗?

【问题讨论】:

  • 我做了 [super tableView: didSelectRowAtIndexPath:] ,这就是它崩溃的原因。但是我仍然无法更改字体。 if ([self.readPost containsObject:post.PostId]) { cell.postTitle.font = [UIFont fontWithName:@"Helvetica-Light" size:14]; } cell.postTitle.text=post.Title; cell.subTitle.text=[NSString stringWithFormat:@"%i points by %@ %@", post.Points, post.Username, post.TimeCreatedString]; return cell;

标签: ios objective-c uitableview


【解决方案1】:

如果你使用 UITableView 来显示你的信息,你应该使用 delgate didSelectRowAtIndexPath。

为了使用自定义界面(我假设你有),你应该创建自己的自定义单元格,子类 UITableViewCell 并创建一个控制器和 xib。然后,您可以将您的 xib 注册到表中并使用它。然后就可以调用需要的属性了。

【讨论】:

    【解决方案2】:

    当导航控制器重新回到顶层(并被销毁?)时,我必须以某种方式记住这个状态。

    最好通过创建自定义协议使用委托方法来处理: https://developer.apple.com/library/ios/documentation/cocoa/conceptual/ProgrammingWithObjectiveC/WorkingwithProtocols/WorkingwithProtocols.html

    当您的用户单击单元格时,您将调用一个委托方法,该方法可以将 postID 值设置回顶部控制器中。

    还有 didSelectRowAtIndexPath 但是在这个方法中,我不能直接访问单元格属性对吗?

    是的,你可以进入牢房。看看这个问题和答案: How to reach the current selected cell in didSelectRowAtIndexPath?

    或者,如果您想首先获取用于创建表格单元格的数据,在您的didSelectRowAtIndexPath 方法中,您可以使用indexPath.row 值从您的数组中获取该值索引位置并通过委托方法传递。

    【讨论】:

    • 嘿,我想我应该将所有选定的 postID 添加到一个数组中并将其存储在 NSUserDefault 中,这样这将在应用程序关闭之间保留。由于某种原因,它现在正在崩溃。
    • 你用什么来填充 UITableView?
    • 嘿,我解决了我的问题。谢谢。它崩溃的原因是因为我在 didSelectRowAtIndexPath 中调用了 super。
    【解决方案3】:

    找到了解决办法。

    只需将所选帖子的postId 添加到didSelectRowAtIndexPath 中的NSMutableArray。然后在cellForRowAtIndexPath 中检查以确保postID 不存在于我的self.readPostID 数组中。

    如果是,我将字体设置为 Helvetica Light,否则将其设置为 Helvetica Bold。

    首先,我必须确保每次查看都显示[self.tableview reloadData]

    其次,我只是将 readPostId 的 NSMutableArray 保存到 NSUserDefault 每次 viewDidDisappear 并在 viewDidLoad 中重新加载数组。

    我还必须确保单元格重用不会影响字体。 else 条件解决了这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-24
      • 2011-04-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多