从后台线程在UINavigationItem上显示UISearchController

时间:2017-11-10 08:20:11

标签: ios objective-c multithreading ios11

使用iOS 11 SDK时,如果要从后台线程显示UISearchController,则会显示更新的

- (void)viewDidLoad
{
    self.searchResultsController = [UITableViewController new];
    self.searchController = [[UISearchController alloc] initWithSearchResultsController:self.searchResultsController];

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{

        NSLog(@"Do something in background");

        dispatch_async(dispatch_get_main_queue(), ^{
            if (@available(iOS 11.0, *)) {
                self.navigationItem.searchController = self.searchController;
            }
        });
    });
}

有没有人知道如何在后台任务完成后显示它?

EDIT1: 带搜索控制器的VC不应该是初始VC。

1 个答案:

答案 0 :(得分:1)

我已经尝试过你的代码并且它完美无缺。请确保您的设备或模拟器版本大于或等于iOS 11,并且您不会对navigationItem执行任何其他操作。

如果从其他viewController推送或显示VC,请将代码放入viewDidAppear。它会起作用