IOS 如何从其子级访问 uipageviewcontroller?

Posted

技术标签:

【中文标题】IOS 如何从其子级访问 uipageviewcontroller?【英文标题】:IOS How to access uipageviewcontroller from its children? 【发布时间】:2015-03-04 22:46:22 【问题描述】:

我有以下类,第一个包含 UIPageViewController 的实例,第二个是孩子的视图控制器

@interface GuidePager : UIViewController     <UIPageViewControllerDataSource, UIPageViewControllerDelegate>
@property (strong, nonatomic) UIPageViewController *pageController;
@property NSArray *viewControllers;
- (void)flipToPage:(NSString *)index;

@end

@interface GuidePagerChild : UIViewController <UIWebViewDelegate>

@end

我需要从 GuidePagerChild 中的 GuidePagerChild 调用 GuidePager 的 flipToPage。

请帮忙。

【问题讨论】:

【参考方案1】:

为孩子添加一个委托协议:

@protocol GuidePagerChildDelegate;

@interface GuidePagerChild : UIViewController <UIWebViewDelegate>
@property (nonatomic, weak) id<GuidePagerChildDelegate> delegate;   
@end

@protocol GuidePagerChildDelegate <NSObject>
@required
- (void)guidePagerChild:(GuidePagerChild *)child flipToPage:(NSString *)index
@end

然后:

@interface GuidePager : UIViewController <
    GuidePagerChildDelegate,  // Add the new protocol to the list.
    UIPageViewControllerDataSource, 
    UIPageViewControllerDelegate
>
@property (strong, nonatomic) UIPageViewController *pageController;
@property NSArray *viewControllers;
- (void)flipToPage:(NSString *)index;

@end

那么当你创建孩子时:

GuidePagerChildDelegate *child = [[GuidePagerChild alloc] init];  // Or however you create it.
child.delegate = self;  // Assuming you create it from within GuidePager.  If not, get a pointer to GuidePager and set it as the delegate.

然后:

@implementation GuidePager

...

- (void)guidePagerChild:(GuidePagerChild *)child flipToPage:(NSString *)index 

     [self flipToPage:index];


...

@end

【讨论】:

还有其他方法。例如,您可以触发NSNotification。一般来说,ios 框架更喜欢委托模式。 然后使用委托可能会阻止释放子页面(我遇到了这个)并使用太多内存。我通过使用通知解决了它。 或者你可以解决内存问题。如果代理被弱引用并且没有任何东西保留它,那么内存泄漏就没有理由了。

以上是关于IOS 如何从其子级访问 uipageviewcontroller?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用不会将删除级联到其子级的 ForeignKeys 创建 Django 模型?

Flutter:了解无状态/有状态小部件如何布局其子级?

如何在 SwiftUI 中根据其子级高度设置 GeometryReader 高度?

有没有办法从 Mongoose 的一个查询中的参数创建父级及其子级?

如何访问其子类中的类的私有变量?

如何在首次显示时折叠包含所有节点的 orgChart,然后通过选择事件显示其子级的第一级?