在另一个类中使用ScrollView Object

时间:2012-01-23 05:23:43

标签: iphone ios xcode uiscrollview

请帮助我!!

有两个类,FirstViewCtrl和SecondViewCtrl。在FirstViewCtrl中,我有UIView,我在{`里面放了一个UIScrollVIew。在SecondViewCtrl中我有UIView(由3个TextField组成)。

现在,我将来自SecondViewCtrl的UIView链接到FirstViewCtrl [_bgScrollView addSubview:SecondViewCtrl.view];

中的UIScrollView

到目前为止一切正常。 我想在这里完成一项小任务,当用户单击TextField时,弹出键盘布局并且背景屏幕应该向上移动(我的意思是键盘不应该隐藏TextField)。 我之前已经实现了它,但这里对我来说看起来有点不同。 因为UIScrollView位于FirstViewCtrl中,而TextField位于SecondViewCtrl(即UIView)中。我可以在SecondViewCtrl中获取textFieldShouldReturn。如何在这里移动BG屏幕?

简单来说,_bgScrollView在FirstViewCtrl中,但我在SecondViewCtrl中处理TextField。当用户选择TextField时,如何移动背景? 我真的很困惑,请帮帮我!!!!

2 个答案:

答案 0 :(得分:0)

您可以通过创建_bgScrollView作为FirstViewController的UIScrollView来访问SecondViewController中的_bgScrollView(property)。

in FirstViewController.h

UIScrollView *_bgScrollView;

@property (nonatomic, retain) UIScrollView *_bgScrollView;

in FirstViewController.m 

@synthesize *_bgScrollView;

现在,您可以使用_bgScrollView作为FirstViewController的属性来访问SecondViewController中的_bgScrollView。另外,要滚动_bgScrollView,您可以使用此功能 -

- (void)scrollViewToCenterOfScreen:(UIView *)theView {  
    CGFloat viewCenterY = theView.center.y;  
    CGRect applicationFrame = [[UIScreen mainScreen] applicationFrame];  

    CGFloat availableHeight = applicationFrame.size.height - 200;     

    CGFloat y = viewCenterY - availableHeight / 2.0;  
    if (y < 0) {  
        y = 0;  
    }  
    [scrollView setContentOffset:CGPointMake(0, y) animated:YES];  

}

答案 1 :(得分:0)

Text, Web, and Editing Programming Guide for iOS中使用示例代码描述了防止键盘覆盖文本字段的一般过程。您需要订阅键盘显示/隐藏通知并调整滚动视图的contentInset属性。

如果您不希望第二个视图控制器知道您的第一个视图控制器,您可以向上走视图层次结构以查找滚动视图。例如:

- (UIScrollView *)scrollViewContainingView:(UIView *)view {
    for ( ; view; view = view.superview) {
        if ([view isKindOfClass:[UIScrollView class]])
            return (UIScrollView *)view;
    }
    return nil;
}