【问题标题】:Passing data to method in Tab Bar View Controller Before ViewDidLoad在 ViewDidLoad 之前将数据传递给选项卡栏视图控制器中的方法
【发布时间】:2019-06-15 11:35:13
【问题描述】:

我在标签栏控制器中使用了两个视图控制器:FirstViewController 和 SecondViewController。我正在尝试从 FirstViewController 调用 SecondViewController 中的方法,但是在通过选择第二个选项卡加载 SecondViewController 之前执行此操作。这可能吗?我已经尝试过通知和委托,但似乎无法让它工作,除非我选择 SecondViewController 并首先运行 ViewDidLoad,然后从 FirstViewController 调用它。

这是在 Objective-c 中,我试图在 SecondViewController 中调用 setAutoModeTimer()。

这是我的代码:

FirstViewController.h

#import <UIKit/UIKit.h>

@protocol FirstViewControllerDelegate <NSObject>

- (void) setAutoModeTimer;

@end

@interface FirstViewController : UIViewController

@property (nonatomic,weak) id <FirstViewControllerDelegate> delegate;

@end

FirstViewController.m

#import "FirstViewController.h"
#import "SecondViewController.h"

@interface FirstViewController ()

@end

@implementation FirstViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    SecondViewController * myViewController = [[SecondViewController alloc] init];
    [myViewController view];
    // Do any additional setup after loading the view, typically from a nib.
}

//- (void)loadView{[self.tabBarController.viewControllers makeObjectsPerformSelector:@selector(view)];}


- (IBAction)startTimerButtonPressed:(id)sender {

    [self.delegate setAutoModeTimer];

}
@end

SecondViewController.h

#import <UIKit/UIKit.h>

@interface SecondViewController : UIViewController

@end

SecondViewController.m

#import "SecondViewController.h"
#import "FirstViewController.h"

@interface SecondViewController () <FirstViewControllerDelegate>

@end

@implementation SecondViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    FirstViewController *firstVC = [self.storyboard instantiateViewControllerWithIdentifier:@"FirstViewController"];
    firstVC.delegate = self;

}

- (void) setAutoModeTimer
{
    NSLog(@"Timer has started");
}

@end

【问题讨论】:

  • 无法在 viewDidLoad 之前执行方法。如果你想传递一些数据,那么你可以将数据保存到 tabBarViewController,然后你可以从 secondViewController 获取数据

标签: ios objective-c uitabbarcontroller


【解决方案1】:

您不需要在每个视图控制器中为另一个视图控制器保留引用。你在做什么是在每个视图控制器中创建 UIViewControllers 的新实例。

   FirstViewController *firstVC = [self.storyboard instantiateViewControllerWithIdentifier:@"FirstViewController"];
   firstVC.delegate = self;

viewDidLoad 完成后,第一个VC 实例将被释放。 因为您创建了一个本地变量。它与 tabBar 中的 viewController 不同。

您需要在视图控制器之间建立一次连接。

这可以通过以编程方式设置您的UITabBarController 来完成,而不是在故事板中。 您可以设置一次UITabBarController的viewControllers,并建立它们之间的连接。

#import "SecondViewController.h"
#import "FirstViewController.h"

@implementation MainTabBarController

- (void)viewDidLoad {
    [super viewDidLoad];
    NSMutableArray *listOfViewControllers = [[NSMutableArray alloc] init];
    FirstViewController *firstVC = [self.storyboard instantiateViewControllerWithIdentifier:@"FirstViewController"];
    SecondViewController * secondVC = [[SecondViewController alloc] init];
    firstVC.delegate = secondVC;
    [listOfViewControllers addObject:firstVC];
    [listOfViewControllers addObject:secondVC];

    [self setViewControllers:listOfViewControllers
                                 animated:YES];

}

【讨论】:

    猜你喜欢
    • 2015-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-08
    • 1970-01-01
    • 2012-05-26
    • 1970-01-01
    相关资源
    最近更新 更多