繁体   English   中英

UiSplitViewController应用程序没有故事板

[英]UiSplitViewController App without storyboards

我是iOS开发的新手,需要一些帮助。 我搜索了高低,找不到答案。 这更像是我不明白发生了什么。 我的问题是,我正在尝试在不使用故事板的情况下编写Master-Detail应用程序。 这有助于我更好地理解ViewControllers的管理和处理方式。 我试图在iPhone上的MasterViewController中的tableView中选择一个项目后呈现DetailViewController。 在iPad上它运作良好,因为两个视图是并排的。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    //Pass data to detailViewController
    if ([_detailDelegate respondsToSelector:@selector(item:selectedAtIndexPath:)]) {

            [_detailDelegate item:[[BNRItemStore sharedStore] findItemAtIndex:indexPath.row] selectedAtIndexPath:indexPath];
    }

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone ) {

        // show DetailViewController


        NSArray *viewControllers = self.splitViewController.viewControllers;

        UINavigationController *detailNavigationViewController = [viewControllers objectAtIndex:1];

        [self showDetailViewController:detailNavigationViewController sender:nil];

    }


}

在故事板中,所选的ViewCell具有到detailViewController的show detail segue 如何在不使用故事板的情况下实现同样的目标?

我的AppDelegate代码可以获得更好的图片

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.

self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];

UISplitViewController *splitViewController = [[UISplitViewController alloc] init];

self.window.rootViewController = splitViewController;


UINavigationController *masterNavigationController = [[UINavigationController alloc]init];
UINavigationController *detailNavigationController = [[UINavigationController alloc]init];


MasterTableViewController *masterTableViewController = [[MasterTableViewController alloc] init];
DetailViewController *detailViewController = [[DetailViewController alloc] init];

masterTableViewController.detailDelegate = detailViewController;
detailViewController.masterDelegate = masterTableViewController;


masterNavigationController.viewControllers = @[masterTableViewController];
detailNavigationController.viewControllers = @[detailViewController];

[splitViewController setViewControllers:@[masterNavigationController,detailNavigationController]];


[self.window makeKeyAndVisible];

    return YES;
}

谢谢。

阅读这篇文章后,我能够解决这个问题。 当UISplitViewController在iPhone上检测到它处于纵向模式时,它会从viewControllers property删除DetailViewController。 当它处于横向模式时,它将DetailViewController(辅助控制器)添加回viewControllers属性。

解:

在MasterViewController(主控制器)中添加了一个强引用属性来存储DetailViewController。

当在MasterViewController表中选择一个项目时,我检查了UISplitViewController viewControllers属性,如果Array中缺少DetailViewController,我将DetailViewController推送到父控制器(UINavigationViewController)堆栈。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

DetailViewController *detailController = (DetailViewController *) self.detailViewController.viewControllers[0];

[detailController item:[[BNRItemStore sharedStore] findItemAtIndex:indexPath.row] selectedAtIndexPath:indexPath];

if (self.splitViewController.viewControllers.count == 1) {

    [self.navigationController pushViewController:self.detailViewController animated:YES];
}

}

尝试改变:

    [self showDetailViewController:detailNavigationViewController sender:nil];

至:

    [self.splitViewController showDetailViewController:detailNavigationViewController sender:nil];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM