iOS:访问调用 Segue 的同一 UIViewController 实例

标签 ios storyboard segue

我有两个 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)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    UIViewController *destinationViewController = segue.destinationViewController;
    Signup *signUp = [destinationViewController isKindOfClass:[SignUp class]] ? (Signup*)destinationViewController : nil;
    signUp.mainViewController = self;
    NSLog(@"Preapre 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)

最佳答案

创建协议(protocol)/委托(delegate)。关于如何实现这一目标的资源很多。总之,您使用希望在源上运行的方法在目标 viewController 上创建协议(protocol),然后从源 viewController 订阅该委托(delegate)。

Protocol Delegate

不要忘记在 prepareForSegue 方法中设置委托(delegate)

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    Signup *signUp = segue.destinationViewController;
    signup.delegate = self;
    NSLog(@"Preapre For Segue %@", self);

关于iOS:访问调用 Segue 的同一 UIViewController 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16359941/

相关文章:

ios - 如何获取performSegueWithIdentifier传入的数据

iphone - iOS 编程建议请求 REF sqlite/iOS 应用程序设计

ios - 是否可以通过扩展使用 Crashlytics?

JavaScript 触发器单击 iOS 浏览器中的链接不起作用

ios - 如何在 ios swift 中以编程方式将 Storyboard View Controller 加载到标签栏 Controller 中?

ios - 使用 performSegueWithIdentifier Swift 2.1 时出错

ios - UIBarButtonItem 在水平滚动下不显示

iphone - iOS5带有 Storyboard,常见的应用程序对象初始化代码放在哪里?

objective-c - Xcode 4 UIButton segue 推送到 TableView Controller

iphone - Xcode Objective-C 转场 "Presentation in Progress"