2015-07-20 2 views
0

Я хочу отменить второй контроллер представления с помощью UIBarButtonItem, но я просто не получу код в порядке. Пожалуйста помоги.UIBarButtonItem Отменить не работает

Viewcontroller.h

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

@interface ViewController : UIViewController <SecondViewControllerDelegate> 
@end 

Viewcontroller.m

#import "ViewController.h" 

@interface ViewController() 

@end 

@implementation ViewController 

- (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. 
} 

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.destinationViewController isKindOfClass:[SecondViewController class]]) { 
     SecondViewController *vc2 = segue.destinationViewController; 
     vc2.delegate = self; 
    } 
} 

-(void)dismissViewController 
{ 
    NSLog(@"dismissed"); 
    [self dismissViewControllerAnimated:YES completion:nil]; 
} 
@end 

Secondviewcontroller.h

#import <UIKit/UIKit.h> 

@protocol SecondViewControllerDelegate <NSObject> 

- (void) dismissViewController; 

@end 

@interface SecondViewController : UIViewController 

@property (weak, nonatomic) id <SecondViewControllerDelegate> delegate; 

- (IBAction)backBarButtonItemPressed:(UIBarButtonItem *)sender; 
@end 

BackbarButton означает CancelButton

Secondviewcontroller .m

#import "SecondViewController.h" 

@interface SecondViewController() 

@end 

@implementation SecondViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 
} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

- (IBAction)backBarButtonItemPressed:(UIBarButtonItem *)sender { 
    [self.delegate dismissViewController]; 
} 
@end 
+0

Почему ваш 'shutViewController' реализован в вашем первом ViewController, когда он объявлен в вашем' SecondViewController.h'? – somtingwong

+0

Чтобы уволить из первого VC и позвонить во второй VC – Nielsapp

+0

Но почему у вас есть объявление для него на вашем втором контроллере просмотра, если вы его не используете. В любом случае, если эта кнопка не будет сохранять какие-либо данные, и вы просто хотите выйти, попробуйте ctrl + перетащить с кнопки на выход «Exit» на раскадровке – somtingwong

ответ

2

Вы можете уволить в secondViewController, я не вижу смысла делегатом в коде

- (IBAction)backBarButtonItemPressed:(UIBarButtonItem *)sender { 
    [self dismissViewControllerAnimated:true completion:nil]; 
} 

Если вы используете шоу SEGUE, и у вас есть navigationController с этими двумя ViewControllers, используйте

- (IBAction)dismiss:(id)sender { 
    [self.navigationController popViewControllerAnimated:true]; 
} 
+0

Ty для ответа, что doenst work, его все еще не увольняют. я попросил делегата уволить с первого VC. – Nielsapp

+0

Какой тип segue вы используете? – Leo

+0

Я использовал show segue из UIBarButtonItem в Первом VC для второго VC, сделанного в раскадровке – Nielsapp

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