如何在事件发生后更新 UITableViewCell

Posted

技术标签:

【中文标题】如何在事件发生后更新 UITableViewCell【英文标题】:How do I update a UITableViewCell after an event 【发布时间】:2014-03-03 13:58:52 【问题描述】:

我想单击一个单元格,首先我想链接一个帐户(Dropbox 或日历或提醒或其他),同时如果链接成功,我想选中该单元格。 我的问题是,一旦关联了帐户,我必须再次点击单元格以添加复选标记。可以通过单击单元格来完成这两项操作吗?


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
UITableViewCell *cell=[tableView cellForRowAtIndexPath:indexPath];
if (![[DBSession sharedSession]isLinked]) 
        [[DBSession sharedSession] linkFromController:self];
              if ([[DBSession sharedSession]isLinked]) 
                  cell.accessoryType = UITableViewCellAccessoryCheckmark;

【问题讨论】:

?为什么你不能用它运行复选标记代码。这是没有意义的。发布您的代码! 我不能直接打勾,因为例如,如果我想在您打开登录页面后链接到保管箱,如果用户点击 x 无法访问,他打了相同的勾号,而不应该放 如果这是您的问题,那么您的问题毫无意义。您询问如何同时运行 2 段代码并且刚刚说不可能这样做。我猜你想问更多类似“Hpw 我是否在事件发生后更新 UITableViewCell”之类的问题,该事件是用户链接一个帐户。再次发布您的代码,以便我们查看 对不起,我的英语不太好,不知道怎么写 好的,你已经发布了设置复选标记的代码......重要的部分是看看你是如何连接帐户的。这个想法是,在某个地方你应该得到一个回调来说明它发生了,然后在里面运行上面的代码来更新单元格 【参考方案1】:

当您第一次选择单元格时,该单元格被选中,当您选择其他单元格时,所有其他单元格都被取消选择。

将此代码放入 Didselect 方法中。

UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
cellStr = cell.textLabel.text;
cell.accessoryType = UITableViewCellAccessoryCheckmark;

把这段代码放到 Diddeselect 方法中

UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
cell.accessoryType = UITableViewCellAccessoryNone;                                

【讨论】:

【参考方案2】:

没有看到什么样的回调,你必须看看用户是否连接了他们的帐户。我唯一可以建议您做的就是在viewDidAppear 上运行以下代码。

注意我不知道这是否可行,因为我不确定在用户看到添加帐户的屏幕后是否会触发viewDidAppear。因为我也不知道那是怎么实现的。

- (void)viewDidAppear:(BOOL)animated

    // Check Dropbox
    NSIndexPath dropboxIndex = [NSIndexPath indexPathForRow:1 inSection:0];
    UITableViewCell *cell=[tableView cellForRowAtIndexPath:dropboxIndex];
    if (![[DBSession sharedSession]isLinked]) 
        [[DBSession sharedSession] linkFromController:self];
              if ([[DBSession sharedSession]isLinked]) 
                  cell.accessoryType = UITableViewCellAccessoryCheckmark;

    // Check calendar
    // same as above


    // Check reminder
    // same as above

编辑

你首先需要看看这个。 Dropbox SDK - linkFromController: delegate or callback?

以上是您检测到该保管箱已被链接的方式。

然后当appDelegate收到成功消息时,使用NSNotificationCenter向屏幕发送消息并运行我上面给你的代码。

【讨论】:

@Luca 在为您进行研究之后,我已经编辑了我的答案。请下次努力解决您自己的问题,或者提供您拥有的所有必要代码,以便人们能够真正理解问题 好的,谢谢你给我这么多的帮助,我很抱歉 @Luca 如果它解决了您的问题,请不要忘记标记最佳答案/支持我的答案

以上是关于如何在事件发生后更新 UITableViewCell的主要内容,如果未能解决你的问题,请参考以下文章

Lua:你如何更新事件中的变量?

如何在sqlalchemy中的值更改后触发事件

如何防止 ScrollViewer 在更新时触发 ViewChanged 事件?

事件发生后如何重新绘制JPanel

如何在事件发生后在给定约束内返回 SKSpriteNode?

在 redis 订阅事件发生后,如何加入套接字 io 房间?