Я пытаюсь показать ViewController непосредственно из его окна родства, дерево выглядит так: CalibrationVC < --- MainVC ---> Настройки VC. MainVC представляет два других модально и в текущем контексте. Теперь то, что я хочу сделать, это нажать кнопку в SettingsVC, чтобы открыть CalibrationVC для определенного устройства. Мне удалось сделать это с помощью UNWIND перетекает и делегат от SettingsVC, и это выглядит следующим образом:Отображение контроллера представления из параллельного окна (с тем же родителем)
- (void)showViewForDeviceCalibration
{
[self performSegueWithIdentifier:@"showCalibrationViewFromSettings" sender:nil];
}
-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"showCalibrationViewFromSettings"])
{
[_delegate calibrateDevice:deviceToConfigure];
}
}
Реализация делегат:
-(void)calibrateDevice:(Device *)device
{
dispatch_block_t autoinitService =
^{
deviceToCalibrateFromSettings = device;
[NSThread sleepForTimeInterval:0.2];
dispatch_async(dispatch_get_main_queue(), ^{
[self performSegueWithIdentifier:@"showCalibrationViewForDeviceFromSettings" sender:nil];
});
};
dispatch_async(dispatch_get_global_queue(QOS_CLASS_UTILITY, 0), autoinitService);
}
И готовиться к методу SEGUE:
- (void)prepareForSegue: (UIStoryboardSegue *)segue sender:(id) sender
{
if ([segue.identifier isEqualToString:@"showCalibrationViewForDeviceFromSettings"])
{
CalibrationViewController *destinationController = (CalibrationViewController*)segue.destinationViewController;
NSArray *devicesToCalibrate = [NSArray arrayWithObject:deviceToCalibrateFromSettings];
[destinationController setDevicesToCalibrate: devicesToCalibrate];
}
Это хорошо работает, но есть ли лучший способ сделать это? Меня действительно беспокоит реализация делегата, потому что он использует отдельный поток только для того, чтобы подождать некоторое время, а затем снова использовать основной поток. Я должен был это сделать, потому что без него CalibrationVC не появлялся, говоря, что MainVC уже представляет. Итак, чтобы подвести итог, есть ли лучший, более оптимальный/правильный способ сделать это?
Да, спасибо, это именно то, что я искал, ясное и простое. – Rafal