iOS - 多次将数据从父视图传递到容器视图的视图
iOS - Pass Data Multiple Times From Parent View Into Container View's View
我有一个 UIPageViewController
,它的一个 View Controller
有一个 Container View
,它的父 View Controller
将数据传递给它,这样容器就可以显示动态数据.我目前有父视图使用此 prepareForSegue
方法将数据传递到容器视图中的视图:
//In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
NSLog(@"CALLED PREPARE FOR SEGUE");
if ([segue.identifier isEqualToString:@"viewEmbed"]) {
//pass data
}
}
但是,这个prepareForSegue
方法只调用了一次(注意我的NSLog调试语句),但是每次UIPageViewController
滑动到父视图我都需要向子视图传递不同的数据.我还注意到 viewDidLoad
方法在我的父视图中仅触发一次,因为 UIPageViewController
保留了其页面的状态。
有没有办法在每次从 UIPageViewController
滑动到父视图时重新实例化(再次调用 viewDidLoad)父视图?我认为这会使 prepareForSegue
方法多次触发,这是我需要它做的。还是我想错了,有更优雅的解决方案?
如有任何帮助或建议,我们将不胜感激。谢谢。
加载的视图仅调用一次,因为您的视图将仅加载一次,因此 segue 也是如此。您应该通过
手动执行此操作
- 在
UIPageViewController
上注册代表更新
推动
- (void)pageViewController:(UIPageViewController * nonnull)pageViewController
willTransitionToViewControllers:(NSArray<UIViewController *> * nonnull)pendingViewControllers
接收这些更新
对您调用方法 child 但不 viewDidLoad
、viewWillAppear
或 viewDidAppear
因为有些代码不应该多次执行。您应该将当前的 viewDidLoad 代码从 child 复制到一个新方法中,并在调用委托方法时从 parent 调用此方法
我有一个 UIPageViewController
,它的一个 View Controller
有一个 Container View
,它的父 View Controller
将数据传递给它,这样容器就可以显示动态数据.我目前有父视图使用此 prepareForSegue
方法将数据传递到容器视图中的视图:
//In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
NSLog(@"CALLED PREPARE FOR SEGUE");
if ([segue.identifier isEqualToString:@"viewEmbed"]) {
//pass data
}
}
但是,这个prepareForSegue
方法只调用了一次(注意我的NSLog调试语句),但是每次UIPageViewController
滑动到父视图我都需要向子视图传递不同的数据.我还注意到 viewDidLoad
方法在我的父视图中仅触发一次,因为 UIPageViewController
保留了其页面的状态。
有没有办法在每次从 UIPageViewController
滑动到父视图时重新实例化(再次调用 viewDidLoad)父视图?我认为这会使 prepareForSegue
方法多次触发,这是我需要它做的。还是我想错了,有更优雅的解决方案?
如有任何帮助或建议,我们将不胜感激。谢谢。
加载的视图仅调用一次,因为您的视图将仅加载一次,因此 segue 也是如此。您应该通过
手动执行此操作- 在
UIPageViewController
上注册代表更新
推动
- (void)pageViewController:(UIPageViewController * nonnull)pageViewController willTransitionToViewControllers:(NSArray<UIViewController *> * nonnull)pendingViewControllers
接收这些更新对您调用方法 child 但不
viewDidLoad
、viewWillAppear
或viewDidAppear
因为有些代码不应该多次执行。您应该将当前的 viewDidLoad 代码从 child 复制到一个新方法中,并在调用委托方法时从 parent 调用此方法