我正在处理一个需要UIsplitViewController的项目,但我需要rootViewController是UITabViewController而不是UITableViewController我正在使用情节提要,它允许我显示UITabViewController,但当我试图使用委托DetailViewController向DetailViewControler发送数据时,没有响应,有什么解决办法吗?我已经试了一个多月,想找到一种什么都找不到的方法。
FirstTabViewController *firsTab = [[FirstTabViewController alloc] init];
UITabBarController *tabBar = [[UITabBarController alloc] init];
tabBar.viewControllers = [NSArray arrayWithObject:firsTab];
UISplitViewController *splitViewController = (UISplitViewController *) self.window.rootViewController;
tabBar = (UITabBarController *)[splitViewController.viewControllers objectAtIndex:0];
splitViewController.delegate = [splitViewController.viewControllers lastObject];
AppDelegate.m applicationDidFinishLaunch添加这些代码行并返回YES
UISplitViewController *splitViewController = (UISplitViewController *)self.window.rootViewController;
UINavigationController *navigationController = [splitViewController.viewControllers lastObject];
splitViewController.delegate = (id)navigationController.topViewController;
TabOneViewController.h添加以下代码行:
#import <UIKit/UIKit.h>
@class DetailViewController;
@interface TabOneViewController : UIViewController
@property (nonatomic, strong) DetailViewController *detailViewController;
- (IBAction)SendData:(id)sender;
@end
TabOneViewController.m添加这些代码:
#import "DetailViewController.h"
在viewDidLoad中添加此行代码:
- (void)viewDidLoad
{
[super viewDidLoad];
// this code is very very important.
self.detailViewController = (DetailViewController *)[[self.splitViewController.viewControllers lastObject] topViewController];
}
在按钮操作方法中添加以下代码行:
- (IBAction)SendData:(id)sender {
self.detailViewController.detailItem = @"Hello From First Tab";
}
在DetailViewController中执行以下操作:在.h文件中添加这些属性
@property (strong, nonatomic) id detailItem;
@property (weak, nonatomic) IBOutlet UILabel *detailDescriptionLabel;
在.m文件中添加以下
- (void)setDetailItem:(id)newDetailItem
{
if (_detailItem != newDetailItem) {
_detailItem = newDetailItem;
// Update the view.
[self configureView];
}
}
- (void)configureView
{
// Update the user interface for the detail item.
if (self.detailItem) {
self.detailDescriptionLabel.text = self.detailItem;
}
}
- (void)viewDidLoad
{
[super viewDidLoad];
// call the configureView method
[self configureView];
}
现在,在添加到左侧面板的任何附加视图上,您必须复制在TabOneController中编写的代码,它应该可以工作
现在完成了,它适用于任何类型的控制器。非常简单的解决方案花了我一个多月的时间来解决它,希望它能帮助你们。