我正在使用 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 的示例中,MasterViewController
和 DetailViewController
从一开始就可见(横向)。
看看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/