2013-12-26 2 views
0

Я только что создал новое приложение-приложение из шаблонов 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» регистрируется).

+0

Интересно, идет ли это, если ([[идентификатор segue] isEqualToString: @ "showAlternate"]) {} – Horst

+0

Интересно. Это готовится к методу segue, но код внутри этого, если нет. – Dylanthepiguy

ответ

0

Я нашел проблему. Я удалил элемент информации по умолчанию по умолчанию и заменил его обычной кнопкой. Проблема в том, что segue необходимо привязать к этой кнопке и подключиться к методу togglePopover в файле MainViewController.m.

Смежные вопросы