gpt4 book ai didi

iphone - 使用 UIbutton 关闭弹出窗口

转载 作者:行者123 更新时间:2023-12-03 19:02:59 25 4
gpt4 key购买 nike

当我尝试通过单击本身位于要关闭的弹出窗口上的 UIButton 来关闭弹出窗口时,我无法弄清楚为什么它不能正常工作,我的项目崩溃了...

- (IBAction) cancelButton: (id) sender{
//[self dismissPopoverAnimated:YES];
}

上面是我的 UIButton 代码

最佳答案

不要从其自身内部忽略弹出窗口。制定一个协议(protocol),向其委托(delegate)发送消息,然后将其解除。例如,您的弹出 View Controller 可能如下所示..

// MyPopoverViewController.h

@protocol MyPopoverDelegate <NSObject>
-(void)didClickCancelButton;
@end

@interface MyPopoverViewController : UIViewController {

}

@property (nonatomic, assign) id<MyPopoverDelegate> delegate;

-(IBAction)cancelButton;

@end

// MyPopoverViewController.m
#import "MyPopoverViewController.h"

@implementation MyPopoverViewController

@synthesize delegate;

// The designated initializer. Override if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad.

/*
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
[super viewDidLoad];
}
*/

-(IBAction)cancelButton {
[self.delegate didClickCancelButton];
}

#pragma mark -
#pragma mark Rotation support

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Overriden to allow any orientation.
return YES;
}

#pragma mark -
#pragma mark Memory Management

- (void)didReceiveMemoryWarning {
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];

// Release any cached data, images, etc. that aren't in use.
}


- (void)viewDidUnload {
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}


- (void)dealloc {
[super dealloc];
}


@end

然后你可以使用..

//  ClassImplementingPopoverController.h

#import <UIKit/UIKit.h>
#import "MyPopoverViewController.h"

@interface ClassImplementingPopoverController : UIViewController <UIPopoverControllerDelegate, MyPopoverDelegate> {

UIPopoverController *myPopoverController;
}

@property (nonatomic, retain) UIPopoverController *myPopoverController;

@end

// ClassImplementingPopoverController.m

#import "ClassImplementingPopoverController.h"
#import "MyPopoverViewController.h"


@implementation ClassImplementingPopoverController

@synthesize myPopoverController;

#pragma mark -
#pragma mark View lifecycle


- (void)viewDidLoad {
[super viewDidLoad];
}

// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Return YES for supported orientations.
return YES;
}

#pragma mark -
#pragma mark MyPopover delegate

-(void)didClickCancelButton {
if ([myPopoverController isPopoverVisible]) {
[myPopoverController dismissPopoverAnimated:YES];
[myPopoverController release];
}
}

#pragma mark -
#pragma mark UIPopoverController delegate

-(void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController {
if (popoverController == myPopoverController) {
[myPopoverController release];
}
}

/* Use something like this to create your popover, just make sure you set the delegate to self so you can receive the messages

NSLog(@"Displaying Popover!");
MyPopoverViewController *detailViewController = [[MyPopoverViewController alloc] initWithNibName:@"MyPopoverViewController" bundle:nil];
[detailViewController setDelegate:self];
// Pass the selected object to the new view controller.
myPopoverController = [[UIPopoverController alloc] initWithContentViewController:detailViewController];
[detailViewController release];
myPopoverController.popoverContentSize = CGSizeMake(500.0, 150.0);
[myPopoverController setDelegate:self];
*/

#pragma mark -
#pragma mark Memory management

- (void)didReceiveMemoryWarning {
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];

// Relinquish ownership any cached data, images, etc. that aren't in use.
}

- (void)viewDidUnload {
// Relinquish ownership of anything that can be recreated in viewDidLoad or on demand.
// For example: self.myOutlet = nil;
self.myPopoverController = nil;
}


- (void)dealloc {
[myPopoverController release];
[super dealloc];
}

@end

关于iphone - 使用 UIbutton 关闭弹出窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3565968/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com