我正在挖掘SO,并认为我已经想出如何做到这一点,但我的测试失败了。我正试图从启动/包含的视图控制器关闭一个popovercontroller(我对poc和vc关系仍然有点模糊)。
在我的视图控制器中。我有这个:
@interface OAI_vcOperatingRooms : UIViewController {
OAI_ColorManager* colorManager;
OAI_FileManager* fileManager;
UIPopoverController* myPopOverController;
}
@property (nonatomic, weak) UIPopoverController* myPopOverController;
- (void) closeVC : (id) sender;
并在.m文件中
UIButton* btnClose = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[btnClose addTarget:self
action:@selector(closeVC:)
forControlEvents:UIControlEventTouchDown];
[btnClose setTitle:@"Close" forState:UIControlStateNormal];
btnClose.frame = CGRectMake(10.0, 210.0, 160.0, 40.0);
[self.view addSubview:btnClose];
- (void) closeVC : (id) sender {
[myPopOverController dismissPopoverAnimated:YES];
}
在调用popovercontroller的uiview中,我引用了viewcontroller并添加了这个:
//operating rooms
controller2 = [[OAI_vcOperatingRooms alloc] initWithNibName:@"OAI_vcOperatingRooms" bundle:nil];
popoverController2 = [[UIPopoverController alloc] initWithContentViewController:controller2];
controller2.myPopOverController = popoverController2;
没有错误,但是当我点击关闭按钮时没有任何反应。是否可以从VC中引用POC?
由于
答案 0 :(得分:1)
我相信ott的评论是关于某事的 - 尝试使用strong
属性而不是weak
属性。 ARC最后一次使用后,weak
属性可能会被ARC设置为nil。 strong
属性将在其父对象的生命周期内保留(在本例中为UIViewController
子类),除非您提前将其设置为nil
。
注意:您的界面中可能不需要UIPopoverController *myPopOverController;
,因为Xcode会自动生成_myPopOverController
作为后备变量。