gpt4 book ai didi

objective-c - 为什么在 Safari 中打开 URL 时 Table Cell 不会立即取消选择?

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:31:54 24 4
gpt4 key购买 nike

我有一个应用程序,它会在触摸 UITableViewCell 时关闭并转到 Safari 打开 URL。但是,当我返回应用程序时,该单元格仍会被选中几秒钟。为什么不立即取消选择?这是一个错误吗?这是代码:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

[tableView deselectRowAtIndexPath:indexPath animated:NO];

if (indexPath.section == 0 && indexPath.row == 0) {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.example.com/"]];
}

}

我尝试将 [tableView deselectRowAtIndexPath:indexPath animated:NO]; 移动到顶部并关闭动画,但没有帮助。这没什么大不了的,但如果可能的话,我希望立即取消选择。

UIButton 也会发生这种情况。返回应用程序后,它会保持高亮状态一两秒钟。

最佳答案

[tableView deselectRowAtIndexPath:indexPath animated:NO]; 之类的更改在运行循环的下一次迭代中生效。当您通过 openURL: 退出时,会延迟下一次迭代,直到您切换回应用程序。切换回来是通过在您离开之前循环进入屏幕图像然后在几分钟后使应用程序再次交互来实现的。因此,所选图像会保留。

将实现的细节放在一边,逻辑是影响屏幕内容的东西被捆绑在一起并成为原子的,这样当你进行 View 调整时,你不必总是想'哦不,如果框架现在重新绘制并且只完成了到这里的更改?'。根据 iOS 多任务模型,在您返回应用程序之前不会出现调整界面的原子单元。

快速修复:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

// deselect right here, right now
[tableView deselectRowAtIndexPath:indexPath animated:NO];

if (indexPath.section == 0 && indexPath.row == 0) {
[[UIApplication sharedApplication]
performSelector:@selector(openURL:)
withObject:[NSURL URLWithString:@"http://www.example.com/"]
afterDelay:0.0];

/*
performSelector:withObject:afterDelay: schedules a particular
operation to happen in the future. A delay of 0.0 means that it'll
be added to the run loop's list to occur as soon as possible.

However, it'll occur after any currently scheduled UI updates
(such as the net effect of a deselectRowAtIndexPath:...)
because that stuff is already in the queue.
*/
}

}

关于objective-c - 为什么在 Safari 中打开 URL 时 Table Cell 不会立即取消选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12098830/

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