1

我有一个视图控制器,UINavigationController它在某些时候会推送(navigationcontroller pushViewController: animated:)第二个视图,然后再推送第三个视图,其中我有一个按钮,可以弹回根视图(popToRootViewController: animated:)。问题是视图弹回viewWillApper根视图后,根视图的方法没有被调用。我设置了一些断点来检查它,它只是没有通过它。我有一种方法可以重新加载放置在 中的根视图的某些内容,viewWillApper并且在popToRootViewController: animated. 知道发生了什么吗?

谢谢

4

2 回答 2

0

在 popToRootViewController 之后,我使用了委托方法来强制更新我的视图。我的 rootViewController 调用了一个网络上传类,完成后,我想重置 rootViewController 上的表单字段。

在网络上传类中,我创建了一个委托协议:

@protocol MyNetworkDelegate <NSObject>
@required
- (void) uploadCompleted;
@end

@interface MyNetworkUploader : NSObject{
    id <MyNetworkDelegate> _delegate;
}

@property (nonatomic,strong) id delegate;

//other properties here

+(id)sharedManager;
-(int)writeAssessments;

@end

在 MyNetworkUploader.m 中:

-(int)writeAssessments{
   //code here to do the actual upload
   //.....

   //this is a non-view class so I use a global navigation controller
   //maybe not the best form but it works for me and I get the required
   //behaviour
   [globalNav popToRootViewControllerAnimated:NO];
   [[globalNav.view viewWithTag:1] removeFromSuperview];
   [_delegate uploadCompleted];
}

然后,在我的 rootViewController 中:

//my upload is done within a completion block so I know when
//it's finished
typedef void(^myCompletion)(BOOL);

-(void) uploadAssessment:(myCompletion) compblock{
    //do the upload
    sharedManager=[MyNetwork sharedManager]; //create my instance
    sharedManager.delegate=self;  //set my rootViewController as the network class delegate
    int numWritten= [sharedManager writeAssessments]; 
    compblock(YES);
}

#pragma mark - protocol delegate
-(void)uploadCompleted{
    //this is a local method that clears the form
    [self clearTapped:nil];
}

我并不是说这是最好的解决方案,但它对我来说是一种享受!

于 2015-10-20T08:20:13.183 回答
0

使用 navController 推送时,假设 VC1 正在推送 VC2,并且您正在使用自定义演示样式来推送 VC2,根据您选择的样式,VC2 弹出时不会调用 VC1 的 viewWillAppear。这是根据其演示风格调用的时间列表。

UIModalPresentationStyle, iPhone, iPad

.fullScreen YES YES
.pageSheet YES NO
.formSheet YES NO
.currentContext YES YES
.custom NO NO NO
.overFullScreen NO NO
.overCurrentContext NO NO
.blurOverFullScreen 仅在 tvOS - N/A, N/A
.popover YES NO
.none CRASH CRASH

在这里找到参考

于 2020-03-26T04:47:54.667 回答