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 означает кнопку отмены

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

person Nielsapp    schedule 20.07.2015    source источник
comment
Почему ваш dismissViewController реализован в вашем первом ViewController, когда он объявлен в вашем SecondViewController.h?   -  person somtingwong    schedule 20.07.2015
comment
Отклонить от первого VC и вызвать второй VC   -  person Nielsapp    schedule 20.07.2015
comment
Но почему у вас есть объявление для него во втором контроллере представления, если вы его не используете. В любом случае, если эта кнопка не будет сохранять какие-либо данные, и вы просто хотите выйти, попробуйте нажать Ctrl + перетащить от кнопки к выходу Exit на раскадровке.   -  person somtingwong    schedule 20.07.2015


Ответы (1)


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

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

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

- (IBAction)dismiss:(id)sender {
   [self.navigationController popViewControllerAnimated:true];
}
person Leo    schedule 20.07.2015
comment
Ты за ответ, что не работает, его еще не увольняют. я попытался делегировать отклонить от первого VC. - person Nielsapp; 20.07.2015
comment
Какой тип перехода вы используете? - person Leo; 20.07.2015
comment
Я использовал show segue от UIBarButtonItem в первом VC до второго VC, все сделано в раскадровке. - person Nielsapp; 20.07.2015
comment
Если у вас есть навигационный контроллер, используйте popViewControllerAnimated, посмотрите, что я обновляю - person Leo; 20.07.2015