Ton*_*ony 11 xcode storyboard uibutton popover
我读过吨的东西,在这个虽然大多数似乎是在关于非故事板的做法,我以为我已经拼凑在一起位和理解了它.但是,以下代码不会导致我的popover被解雇.Popover中的dismissPopoverButtonPressed按钮执行但委托中的dismissPopover方法中的断点永远不会发生.非常感谢有人密切关注代码以发现错误.
谢谢
在下面,NewGameViewController包含一个UIButton.按此按钮会弹出Popover Segue并随后显示包含PopViewController UIView的弹出窗口.
NewGameViewController.h
#import "PopViewController.h"
@interface NewGameViewController: UIViewController <DismissPopoverDelegate>
{
UIPopoverController *popover;
}
Run Code Online (Sandbox Code Playgroud)
NewGameViewController.m
@implementation NewGameViewController
-(void)prepareForSegue:(UIStoryboardPopoverSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"popoverSegue"])
{
popover = [(UIStoryboardPopoverSegue *)segue popoverController];
// getting warning: Assigning to 'id<UIPopoverControllerDelegate>' from incompatible type 'NewGameViewController *const__strong'
//popover.delegate = self;
}
}
-(void)dismissPopover
{
[popover dismissPopoverAnimated:YES];
}
Run Code Online (Sandbox Code Playgroud)
PopViewController.h
@protocol DismissPopoverDelegate <NSObject>
-(void) dismissPopover;
@end
@interface PopViewController: UIViewController
{
__unsafe_unretained id<DismissPopoverDelegate> delegate;
}
@property (nonatomic, assign) id<DismissPopoverDelegate> delegate;
-(IBAction)dismissPopoverButtonPressed:(id)sender;
@end
Run Code Online (Sandbox Code Playgroud)
PopViewController.m
#import "NewGameViewController.h"
@implementation PopViewController
@synthesize delegate;
-(IBAction)dismissPopoverButtonPressed:(id)sender
{
[self.delegate dismissPopover];
}
Run Code Online (Sandbox Code Playgroud)
jrt*_*ton 13
当从故事板segue链接到弹出控制器时,segue的popoverController属性引用标准UIPopoverController.这个控制器本身有一个属性,contentViewController它代表实际上在弹出窗口中呈现的视图控制器,在你的情况下PopViewController.
因此,当你真正需要将自己设置为popover的内容视图控制器的委托时,你当前的代码将自己设置为popover控制器的委托.
您仍需要保留对弹出控制器的引用,以解除,以便保留现有代码,但进行以下更改:
-(void)prepareForSegue:(UIStoryboardPopoverSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"popoverSegue"])
{
popover = [(UIStoryboardPopoverSegue *)segue popoverController];
// Get a reference to the content view controller of the popover
PopViewController *popVC = (PopViewController*)popover.contentViewController;
// Set ourselves as the content VC's delegate
popVC.delegate = self;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6775 次 |
| 最近记录: |