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 模型?
如何在 SwiftUI 中根据其子级高度设置 GeometryReader 高度?