gpt4 book ai didi

ios - UI设计、iOS开发如何通过队列/NSThread处理并发

转载 作者:行者123 更新时间:2023-11-29 03:55:57 24 4
gpt4 key购买 nike

从一开始我就想实现的目标很简单。我终于发现很难处理了。

我想将表格 View 作为选择列表推送,用户选择一个单元格,单元格字符串作为选定字符串发送到前一个 View ,简单吧??

先看两张图

select housing, then push to the next view

select one cell in this view

令我困扰的是:

我想提供(至少)两个按钮,左边一个是导航 Controller 自动生成的后退按钮,右边一个用于编辑。导航 Controller 默认有两个按钮(据我所知)。因此,没有地方放置“完成”按钮,该按钮应该供用户点击然后确认并弹出到上一个 View 。因此,当用户点击一个单元格(例如“佩戴”)时,我希望发生以下情况,自动且用户可以直观地看到:

  1. 用户可以看到“Housing”单元格未标记
  2. 然后用户可以看到“佩戴”单元格被标记
  3. 然后经过一点时间间隔(例如 0.2 秒),弹出到上一个 View 并自动更新选择。

起初我以为这很容易,但事实并非如此。这是我的代码,但可以有线工作

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

dispatch_queue_t queue=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH,0ul);

dispatch_async(queue, ^{
//unmark previous cell
if (selectedIndexPath!=nil) {
[[self.tableView cellForRowAtIndexPath:selectedIndexPath]setAccessoryType:UITableViewCellAccessoryNone];
}
selectedIndexPath=indexPath;


//get the selected cell to mark
UITableViewCell *cell=[self.tableView cellForRowAtIndexPath:indexPath];
[cell setAccessoryType:UITableViewCellAccessoryCheckmark];

dispatch_sync(dispatch_get_main_queue(), ^{
//wait a little
[NSThread sleepForTimeInterval:0.2];
//return to previous view
NSLog(@"here.........");
if ([objectToUpdateCategory respondsToSelector:@selector(updateCategoryTo:withSelectedIndexPath:)]) {
NSLog(@"sending.......... update info");
[objectToUpdateCategory updateCategoryTo:cell.textLabel.text withSelectedIndexPath:selectedIndexPath];
NSLog(@"sent update info");
}
[self.navigationController popViewControllerAnimated:YES];

});

});

棘手的是,如果我把 [self.navigationController popViewControllerAnimated:YES];到最后, View 不会直观地更新取消标记和标记步骤并立即返回到上一个 View 。起初,当我没有考虑取消标记的事情时,代码中的“队列”东西可以在弹出之前直观地执行标记步骤,但有时不起作用。我不知道我的代码是否正确,实际上我不知道不太了解苹果的队列技术。但我很确定它与 NSThread/队列或处理并发的其他内容有关。我检查了苹果文档一整天,没有找到直接答案。

希望有人能帮助我,提前致谢:)

最佳答案

要“经过一点时间间隔(例如 0.2 秒),弹出到上一个 View ”,请使用 performSelector:withObject:afterDelay: 方法或其变体之一,例如:

[self performSelector:@selector(delayedPop) withObject:nil afterDelay:0.2];

并将popViewControllerAnimated放入delayedPop方法中,例如:

-(void)delayedPop{
[self.navigationController popViewControllerAnimated:YES];
}

关于ios - UI设计、iOS开发如何通过队列/NSThread处理并发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16505487/

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