大概的思路如下:
在view中新建一个空白vc,取得view所属的vc后,将空白vc addChildViewController到所属vc。
这样空白vc的viewDidAppear就会获得回调了,再传递给view就可以了。
下面的例子,没有考虑循环引用等情况,用到的自行优化。
@interface TestVC : UIViewController
@property (nonatomic, copy)void (^viewDidAppear)(void);
@end
@implementation TestVC
-(instancetype)init{
self = [super init];
self.view.frame = CGRectMake(0, 0, 0, 0);
return self;
}
-(void)viewDidAppear:(BOOL)animated{
if (_viewDidAppear){
_viewDidAppear();
}
}
@end
@interface TestView : UIView
{
TestVC *aVC;
}
@end
@implementation TestView
-(void)didMoveToSuperview{
if(!aVC){
__weak TestView *weakSelf = self;
aVC = [TestVC new];
aVC.viewDidAppear = ^(){
[weakSelf viewDidAppear];
};
UIViewController *belongVC = [self viewController];
[belongVC.view addSubview:aVC.view];
[belongVC addChildViewController:aVC];
}
}
-(void)viewDidAppear{
NSLog(@"view viewDidAppear");
}
- (UIViewController*)viewController {
for (UIView* next = [self superview]; next; next = next.superview) {
UIResponder* nextResponder = [next nextResponder];
if ([nextResponder isKindOfClass:[UIViewController class]]) {
return (UIViewController*)nextResponder;
}
}
return nil;
}
@end