ios - iPad - DetailViewController 以编程方式

标签 ios ipad uisplitviewcontroller

我正在使用 UISplitViewController 开发 iPad 应用程序。我还使用 DetailViewController 在其中显示一些来自 XML 的信息,但是这些信息没有显示在 DetailViewController 中,而是显示在 MaterViewController 中。我真的不知道如何解决它。你能帮忙吗?谢谢

有代码:

-(void) showDetailsForIndexPath:(NSIndexPath*)indexPath
{
    [self.searchBar resignFirstResponder];
    DetailViewController* vc = [self.storyboard instantiateViewControllerWithIdentifier:@"DetailsViewController"];

    Slova* slova;

    if(isFiltered)
    {
        slova = [filteredTableData objectAtIndex:indexPath.row];
    }
    else
    {
        slova = [self.slovoArray objectAtIndex:indexPath.row];
    }

    vc.slovoItem = slova;
    [self.navigationController pushViewController:vc animated:true];
}

最佳答案

原因是您将新的 UIViewController 插入 self 的堆栈,这可能是 MasterViewController。相反,使用 Apple 的 Master-Detail Application 创建一个新项目,您将看到他们是如何做到的。

警告:他们使用 Storyboard,但很可能全部用代码完成。

在 Apple 的示例中,MasterViewControllerDetailViewController 从一开始就可见(横向)。

看看Apple的例子是如何为DetailViewController设置detailItem(slovoItem?):

#pragma mark - Segues
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([[segue identifier] isEqualToString:@"showDetail"]) {
        NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
        NSDate *object = self.objects[indexPath.row];
        DetailViewController *controller = (DetailViewController *)[[segue destinationViewController] topViewController];
        [controller setDetailItem:object];
        controller.navigationItem.leftBarButtonItem = self.splitViewController.displayModeButtonItem;
        controller.navigationItem.leftItemsSupplementBackButton = YES;
    }
}

因此,DetailViewController 已经可见,只需更新其 detailItem 属性即可。

因此,DetailViewController中存在如下代码:

#pragma mark - Managing the detail item
- (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 description];
    }
}

关于ios - iPad - DetailViewController 以编程方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27953947/

相关文章:

ios - 创建一个 Combine 的发布者,例如 RxSwift 的 Observable.Create 用于 Alamofire 请求

javascript - 在 iPad 中隐藏地址栏

iPhone groupTableViewBackgroundColor 替代 iPad

iphone - HitTest 以避免 subview 但希望另一个 subview 工作

嵌套导航 Controller 上的 iOS8 行为

iphone - 以编程方式隐藏 UISplitview 的 masterDetailview

ios - 使用 Storyboard 时使用 UITabBarController 在 View 之间传递数据

ios - 在 Swift 项目、Xcode 中导入框架

swift - 如何以编程方式显示 UISplitViewController Master?

ios - 如何在iOS Chart Graph Framework中设置多种背景颜色