【发布时间】: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