Я только что создал новое приложение-приложение из шаблонов Xcode, и у меня возникла проблема с вызовом метода - (void)flipsideViewControllerDidFinish:(FlipsideViewController *)controller
. Когда я использую три пальца на трекпаде, чтобы определить его, он говорит, что метод определен в MainViewController.m, когда он определенно находится в протоколе Flip.Xcode считает, что метод делегирования - это фактически новый объявляемый метод.
MainVC.h
#import "FlipsideViewController.h"
@interface MainViewController : UIViewController <FlipsideViewControllerDelegate, UIPopoverControllerDelegate>
@property (strong, nonatomic) UIPopoverController *flipsidePopoverController;
@property (weak, nonatomic) IBOutlet UIView *backgroundView;
@end
.m
#import "MainViewController.h"
@interface MainViewController()
@end
@implementation MainViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
_backgroundView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"Background.jpg"]];
_backgroundView.contentMode = UIViewContentModeCenter;
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
#pragma mark - Flipside View Controller
- (void)flipsideViewControllerDidFinish:(FlipsideViewController *)controller
{
//width
if (controller.widthSegmentedControl.selectedSegmentIndex == 0) {
//number of icons
} else {
//icon space
}
NSLog(@"b"); // not called
[self.flipsidePopoverController dismissPopoverAnimated:YES];
}
- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController
{
self.flipsidePopoverController = nil;
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"showAlternate"]) {
[[segue destinationViewController] setDelegate:self];
UIPopoverController *popoverController = [(UIStoryboardPopoverSegue *)segue popoverController];
self.flipsidePopoverController = popoverController;
self.flipsidePopoverController.delegate = self;
}
}
- (IBAction)togglePopover:(id)sender
{
if (self.flipsidePopoverController) {
[self.flipsidePopoverController dismissPopoverAnimated:YES];
self.flipsidePopoverController = nil;
} else {
[self performSegueWithIdentifier:@"showAlternate" sender:sender];
}
}
@end
FlipVC.h
#import <UIKit/UIKit.h>
@class FlipsideViewController;
@protocol FlipsideViewControllerDelegate
- (void)flipsideViewControllerDidFinish:(FlipsideViewController *)controller;
@end
@interface FlipsideViewController : UIViewController
@property (weak, nonatomic) IBOutlet UISegmentedControl *widthSegmentedControl;
@property (weak, nonatomic) IBOutlet UITextField *widthNumberOfIcons;
@property (weak, nonatomic) IBOutlet UITextField *widthIconSpace;
@property (weak, nonatomic) IBOutlet UISegmentedControl *heightSegmentedControl;
@property (weak, nonatomic) IBOutlet UITextField *heightNumberOfIcons;
@property (weak, nonatomic) IBOutlet UITextField *heightIconSpace;
@property (weak, nonatomic) id <FlipsideViewControllerDelegate> delegate;
- (IBAction)done:(id)sender;
@end
.m
#import "FlipsideViewController.h"
@interface FlipsideViewController()
@end
@implementation FlipsideViewController
- (void)awakeFromNib
{
self.preferredContentSize = CGSizeMake(320.0, 480.0);
[super awakeFromNib];
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
#pragma mark - Actions
- (IBAction)done:(id)sender
{
NSLog(@"a"); //this is called
[self.delegate flipsideViewControllerDidFinish:self];
}
@end
Существует два NSLogs, один для метода, в котором нажата кнопка done (a), и одна для той, где должен быть вызван метод didFinish (b). Проблема в том, что когда я нажимаю кнопку «done» на контроллере Flip, ничего не происходит (хотя «a» регистрируется).
Интересно, идет ли это, если ([[идентификатор segue] isEqualToString: @ "showAlternate"]) {} – Horst
Интересно. Это готовится к методу segue, но код внутри этого, если нет. – Dylanthepiguy