我的项目ViewController
和SecondViewController
中有两个视图控制器,我的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
那么关于在segue之后如何在
tobecalledfromseguepopover
中调用SecondViewController
的任何想法?还可以通过SecondViewCOntroller
知道它是从segue弹出窗口中调用的吗? 最佳答案
通常的事情是委托架构。给弹出窗口一个delegate
属性,然后在您的self
中将其设置为prepareForSegue
。现在,弹出窗口知道在哪里可以找到第一个视图控制器。
通常将其与协议结合使用,以便弹出窗口知道要调用的方法的名称,而不必担心第一个视图控制器的类,但这部分并不重要,尤其是在Objective C中。