将UISplitViewController中的UITableViewController主视图替换为UITabBarV



我正在处理一个需要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中编写的代码,它应该可以工作

现在完成了,它适用于任何类型的控制器。非常简单的解决方案花了我一个多月的时间来解决它,希望它能帮助你们。

最新更新