前の2つの回答を進めて、目的のcバージョンについてもう少し詳しく説明します here (私もObjective-Cコードしかありませんでした)
UIStoryboardSegueWithCompletion を持つ UIStoryboardSegue のサブクラス
クラス UIStoryboardSegueWithCompletion: UIStoryboardSegue { var 補完: (() -> Void)?
override func perform() {
super.perform()
if let completion = completion {
completion()
}
}
}
UIStoryboardSegueWithCompletion.h
#import <UIKit/UIKit.h>
@interface MyStoryboardSegue : UIStoryboardSegueWithCompletion
@property (nonatomic, copy) void(^completion)();
@end
UIStoryboardSegueWithCompletion.m
#import "UIStoryboardSegueWithCompletion.h"
@implementation UIStoryboardSegueWithCompletion
- (void)perform {
[super perform];
if (self.completion != nil) {
[self.destinationViewController.transitionCoordinator
animateAlongsideTransition:nil
completion:^(id<UIViewControllerTransitionCoordinatorContext> context) {
if (![context isCancelled]) {
self.completion();
}
}];
}
}
@end
- UIStoryBoardSegueWithCompletion を出口セグエのクラスとして設定します
注: このセグエのアクションは、元の質問と一致するように unwindToMainMenu にする必要があります [セグエ ui を示す画像][1] [セグエ ui 2 を示す画像][2]
ストーリーボードから終了セグエを選択 カスタムクラスを追加
-(IBAction)unwindToMainMenu(UIStoryboardSegue *)segue {
if([segue isKindOfClass:[UIStoryboardSegueWithCompletion class]]){
UIStoryboardSegueWithCompletion *segtemp = segue;// local prevents warning
segtemp.completion = ^{
NSLog(@"segue completion");
[self performSegueWithIdentifier:@"Categories" sender:self];
};
}
}
終了セグエが遷移を完了した後にコードが実行されるようになりました