我有两个 View Controller 。 MainViewController 推送 SignUp ViewController。一旦 SignUp View Controller 关闭,我需要访问 MainViewController 的同一实例来更新 UIButton.title。
.h 主视图
//MainViewController.h
#import <UIKit/UIKit.h>
@interface MainViewController : UITableViewController
-(void)loggedIn;
@end
.m
@interface MainViewController ()
@end
-(void)loggedIn
{
NSLog (@"This is Logged in inside MainView.m");
self.logInOutButton.title = @"Logout";
}
- (void)prepareForSegueUIStoryboardSegue *)segue senderid)sender
{
UIViewController *destinationViewController = segue.destinationViewController;
Signup *signUp = [destinationViewController isKindOfClass:[SignUp class]] ? (Signup*)destinationViewController : nil;
signUp.mainViewController = self;
NSLog(@"reapre For Segue %@", self);
}
.h 注册
#import <UIKit/UIKit.h>
#import "MainViewController.h"
@interface SignUp : UIViewController
@property (strong, nonatomic) MainViewController *mainViewController;
@end
.m
@synthesize mainViewController;
- (void) loggedIn
{
NSLog(@" MainViewController %@", mainViewController);
[mainViewController loggedIn];
self.presentingViewController dismissViewControllerAnimated:YES completion:nil];
}
当我执行 NSLog 时,我得到了不同的值:
Preapre For Seg <STMainViewController: 0x9f7d600>
MainViewController (null)
Best Answer-推荐答案 strong>
创建协议(protocol)/委托(delegate)。关于如何实现这一点有很多资源。总之,您使用希望在源上运行的方法在目标 viewController 上创建协议(protocol),然后从源 viewController 订阅该委托(delegate)。
Protocol Delegate
不要忘记在您的 prepareForSegue 方法中设置委托(delegate)
- (void)prepareForSegueUIStoryboardSegue *)segue senderid)sender
{
Signup *signUp = segue.destinationViewController;
signup.delegate = self;
NSLog(@"reapre For Segue %@", self);
}
关于iOS:访问调用 Segue 的同一 UIViewController 实例,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/16359941/
|