Objective c 如何在master detail应用程序中使详细视图可滚动

Objective c 如何在master detail应用程序中使详细视图可滚动,objective-c,ios,cocoa-touch,uiscrollview,Objective C,Ios,Cocoa Touch,Uiscrollview,我在iOS上只工作了几个月,但我已经连续几个小时不停地为一些看起来应该非常简单的事情而头痛。我在Xcode中使用了iPad应用程序的主细节模板。我希望细节部分可以滚动,以显示框架中可见内容下方的任何方向的内容。我尝试过在ViewWillDisplay、viewDidLoad、loadView…中的DetailViewController中添加滚动视图的多种组合,我能想到的最好方法是在顶层显示滚动条并显示我正确执行了scrollView.contentSize,因为我可以平移,但是包含字段和内容的

我在iOS上只工作了几个月,但我已经连续几个小时不停地为一些看起来应该非常简单的事情而头痛。我在Xcode中使用了iPad应用程序的主细节模板。我希望细节部分可以滚动,以显示框架中可见内容下方的任何方向的内容。我尝试过在ViewWillDisplay、viewDidLoad、loadView…中的DetailViewController中添加滚动视图的多种组合,我能想到的最好方法是在顶层显示滚动条并显示我正确执行了scrollView.contentSize,因为我可以平移,但是包含字段和内容的实际视图不会移动,并且无法编辑字段。这是我目前的看法。正如您在NSLogs中所看到的,我试图理解视图堆栈。如果在日志之前取消对行的注释,则会完全丢失滚动条

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

    UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 768, 1024)];
    scrollView.contentSize = CGSizeMake(2048, 2048);

    UIView *parentView = [[UIView alloc] init];

    parentView = [[self view] superview];

    [[parentView superview] addSubview:scrollView];

    //[scrollView addSubview:[self view]];

    NSLog(@"%@", [parentView superview]);
    NSLog(@"%@", parentView);
    NSLog(@"%@", [super view]);
    NSLog(@"%@", [self view]);

    [scrollView setDelegate:self];

}

对于如何正确实施此场景的UIScrollView,如有任何指导或提示,我将不胜感激。

您应该在IB中添加
UIScrollView
。请确保将所有现有视图和控件移动为滚动视图的子视图。您必须将滚动视图链接到一个
IBOutlet
,这样您就可以在视图控制器中设置内容大小。

而不是试图将uiscrollview包装在主视图的superview(您错误地尝试获取它的所有权(无论如何它应该为空)),为什么不将您的UI元素聚集到一个完整大小的子视图中,并将scrollview围绕该子视图进行包装?这会容易得多

您的层次结构如下所示:


Self.view->ScrollView(设置了contentSize)->包含需要滚动的元素的UIView->各种UI元素

非常简单。我想我试图编程而不是使用IB太难了。我现在的一个“副作用”是,我的视图实际上是一个UIControl,因此当我在任何UITextField之外触摸时,它会关闭键盘。似乎我不能同时让它和UIScrollView共存?您可以子类化
UIScrollView
并覆盖
touchSedend
,以检测视图中的触摸。