iOS/iPhone/iPad/watchOS/tvOS/MacOSX/Android プログラミング, Objective-C, Cocoa, Swiftなど
アラートの内容をカスタマイズするなら、ビューコントローラにしてnibにしてしまえば?ということで、やってみました。
アラート風のビューコントローラを呼び出すコードだ。
- (IBAction)modalPane:(id)sender
{
ModalPaneViewController *modalPaneViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"ModalPaneViewController"];
[modalPaneViewController setCompletionHandler:^(ModalPaneViewControllerResult result) {
switch (result) {
case ModalPaneViewControllerResultCancelled:
[self performSelectorOnMainThread:@selector(didCancel:) withObject:nil waitUntilDone:NO];
break;
case ModalPaneViewControllerResultDone:
[self performSelectorOnMainThread:@selector(didDone:) withObject:nil waitUntilDone:NO];
break;
default:
break;
}
[self dismissModalViewControllerAnimated:YES];
}];
[self presentModalViewController:modalPaneViewController animated:YES];
}
- (void)didDone:(id)arg
{
DBGMSG(@"%s", __func__);
}
- (void)didCancel:(id)arg
{
DBGMSG(@"%s", __func__);
}
アラート風ビューコントローラのコードは、以前紹介したModelPaneとなる。
typedef enum ModalPaneViewControllerResult {
ModalPaneViewControllerResultCancelled,
ModalPaneViewControllerResultDone
} ModalPaneViewControllerResult;
typedef void (^ModalPaneViewControllerCompletionHandler)(ModalPaneViewControllerResult result);
@interface ModalPaneViewController : UIViewController
@property (nonatomic, copy) ModalPaneViewControllerCompletionHandler completionHandler;
- (IBAction)done:(id)sender;
- (IBAction)cancel:(id)sender;
@end
@implementation ModalPaneViewController
@synthesize completionHandler = _completionHandler;
- (void)viewDidLoad
{
[super viewDidLoad];
}
- (void)viewDidUnload
{
self.delegate = nil;
self.completionHandler = nil;
[super viewDidUnload];
}
- (IBAction)done:(id)sender
{
DBGMSG(@"%s", __func__);
if (self.completionHandler) {
self.completionHandler(ModalPaneViewControllerResultDone);
}
}
- (IBAction)cancel:(id)sender
{
DBGMSG(@"%s", __func__);
if (self.completionHandler) {
self.completionHandler(ModalPaneViewControllerResultCancelled);
}
}
@end
ただし、ビューコントローラは全画面?なので、背景のビューを透明に設定してみたのだが、上手くいかなかった?何故だ!