0

我正在开发一个需要 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]; 
4

1 回答 1

0

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 编写的代码,它应该可以工作

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

于 2013-09-03T07:47:37.943 回答