我的项目ViewControllerSecondViewController中有两个视图控制器,我的ViewController有一个按钮,可以对SecondViewController进行弹出搜索,然后在我的SecondViewController中有一个按钮,我想将其用于从ViewController调用方法,并且我认为可以使用[self presentingViewController],但是该指针设置为nil,所以我不太确定如何在弹出窗口后在ViewController中的第一个SecondViewController中调用方法塞古。

这是我的ViewController.h的代码

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

- (IBAction)dosegue:(id)sender;
-(void)tobecalledfromseguepopover;
@end



ViewController.m

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

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

}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{

}
-(void)tobecalledfromseguepopover{
    NSLog(@"Called from segue popover");
}

- (IBAction)dosegue:(id)sender {
    [self performSegueWithIdentifier:@"segueforpopup" sender:self];
}
@end


SecondViewController.h

#import <UIKit/UIKit.h>

#import "ViewController.h"
@interface SecondViewController : UIViewController
- (IBAction)returntocaller:(id)sender;


@end


SecondViewController.m


#import "SecondViewController.h"

@interface SecondViewController()

@end
@implementation SecondViewController

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


- (IBAction)returntocaller:(id)sender {
    [self dismissViewControllerAnimated:YES completion:^{
        ViewController* caller = (ViewController*)[self presentingViewController];
        if(caller!=nil){
            [caller tobecalledfromseguepopover];
        }else{
            NSLog(@"nil");
        }
    }];
}
@end


我的UI
ios - segue弹出后从PresentingViewController调用方法-LMLPHP
那么关于在segue之后如何在tobecalledfromseguepopover中调用SecondViewController的任何想法?还可以通过SecondViewCOntroller知道它是从segue弹出窗口中调用的吗?

最佳答案

通常的事情是委托架构。给弹出窗口一个delegate属性,然后在您的self中将其设置为prepareForSegue。现在,弹出窗口知道在哪里可以找到第一个视图控制器。

通常将其与协议结合使用,以便弹出窗口知道要调用的方法的名称,而不必担心第一个视图控制器的类,但这部分并不重要,尤其是在Objective C中。

10-08 08:05
查看更多