单击 uibutton 时关闭弹出窗口 [英] Dismiss popover when clicking a uibutton
问题描述
我确实有一个以编程方式生成的弹出视图控制器,而没有来自主视图控制器的故事板,并且希望在用户通过弹出视图控制器工具栏上的完成"按钮引入输入后将其关闭.我一直在尝试使用 protrocoll 来消除弹出框,但它不起作用.我一直在培养和应用互联网上的一些建议,但都给出了相同的负面结果.我是否监督某事?
I do have a popup view controller generated programmatically without a storyboard from the main view controller and would like to dismiss it once the input is being introduced by the user with a Done button on a tool bar at the popupview controller. I have been trying to use a protrocoll to dismiss the popover but it does not work. I have been fostering and applying several suggestions found in internet but all gave the same negative result. Do I oversee something?
相关代码如下:
主视图控制器.h
#import <UIKit/UIKit.h>
#import "PopOverContentVC.h"
@interface CCViewController : UIViewController <UIPopoverControllerDelegate, PopOverContentVCDelegate> {
UIPopoverController *detailViewPopover;
}
@property (retain, nonatomic) UIPopoverController *detailViewPopover;
@end
主视图控制器 .m 文件
main view controller .m file
#import "PopOverContentVC.h"
@interface CCViewController ()
@end
@implementation CCViewController
@synthesize detailViewPopover;
...
- (void) dismissPopOverContentVC{
[detailViewPopover dismissPopoverAnimated:YES];
detailViewPopover = nil;
}
- (void) popOverSetUp{
PopOverContentVC *content = [[PopOverContentVC alloc] init];
detailViewPopover = [[UIPopoverController alloc] initWithContentViewController:content];
detailViewPopover.popoverContentSize = CGSizeMake(500., 150.);
detailViewPopover.delegate = self;
[detailViewPopover presentPopoverFromRect:[self coordinatesOfSegment]
inView:self.spreadSheetView
permittedArrowDirections:UIPopoverArrowDirectionUp
animated:YES];
- (void) segmentSelectedAtRow: (UISegmentedControl *)sender{
if (self.detailViewPopover) {
[self.detailViewPopover dismissPopoverAnimated:YES];
self.detailViewPopover = nil;
[self popOverSetUp];
} else {
[self popOverSetUp];
}
}
...
@end
popover view controller .h 文件
popover view controller .h file
#import <UIKit/UIKit.h>
@class PopOverContentVC;
@protocol PopOverContentVCDelegate <NSObject>
- (void)dismissPopOverContentVC;
@end
@interface PopOverContentVC : UIViewController
@property (assign, nonatomic) id <PopOverContentVCDelegate> delegate;
- (void) doneButtonPressed:(id)sender;
...
@end
popover view controller .m 文件
popover view controller .m file
#import "PopOverContentVC.h"
#import "CCViewController.h"
@interface PopOverContentVC ()
@property (strong, nonatomic) UIBarButtonItem *doneButton;
@end
@implementation PopOverContentVC
@synthesize delegate;
...
- (void) viewDidLoad {
...
self.doneButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(doneButtonPressed:)];
...
}
- (void) doneButtonPressed:(id)sender {
[self.delegate dismissPopOverContentVC];
}
我已经按照 NSLog 执行了所有步骤并且一切正常,直到我按下完成按钮 [self.delegate OffPopOverContentVC];没有被执行,因此我没有进入主视图控制器来执行方法dismissPopOverContentVC 来关闭popupview 控制器.我做错了什么或者我错过了什么?
I have followed with NSLog all the steps and everything works well until after I press the done button [self.delegate dismissPopOverContentVC]; is not being executed and consequently I do not get to the main view controller to execute the method dismissPopOverContentVC for dismissing the popupview controller. What have I done wrong or did I miss something?
提前感谢您的任何提示.
Thank you in advance for any hint.
推荐答案
在我看来不像你在设置 PopOverContentVC
对象的 delegate
- 你'只设置 UIPopoverController
的 delegate
.在 popoverSetup
添加
Doesn't look to me like you're setting the delegate
of your PopOverContentVC
object - you're only setting the delegate
of your UIPopoverController
. In popoverSetup
add
content.delegate = self;
在您创建 PopOverContentVC
之后.
这篇关于单击 uibutton 时关闭弹出窗口的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!