iOS - 同时滚动两个UITextView

时间:2011-08-31 21:32:34

标签: iphone objective-c ios ios4 uitextview

我已经做了一些环顾四周,但我找不到任何清楚解释如何同时滚动两个不可编辑的UITextViews的东西。我想我可能需要使用scrollRangeToVisiblesetContentOffset,但我无法让其中任何一个工作。

有没有人有任何关于这方面的例子/样本或文件,他们可以指向我?

编辑:为了澄清,我希望能够滚动一个UITextView,并在第二个UITextView上反映滚动的结果。

谢谢!

3 个答案:

答案 0 :(得分:1)

使用UIScrollViewDelegate方法获取有关第一个滚动视图的滚动操作的信息,然后以编程方式滚动第二个滚动操作:

- (void) scrollViewDidScroll:(UIScrollView *)view1 {
    scrollView2.contentOffset = view1.contentOffset;
}

答案 1 :(得分:0)

反应

- (void)scrollViewDidScroll:(UIScrollView *)scrollView{

并根据setContentVisible设置另一个的scrollView scrollView.contentOffset

请注意,即使以编程方式调用,UIScrollView的某些方法也会调用scrollViewDidScroll。这适用于scrollRangeToVisible,并且将以循环结束,除非您采取措施来阻止此循环。我认为setContentOffset或设置scrollView2.contentOffset = CGPointMake(..,..)不会调用scrollViewDidScroll。但是,我不会在血液中签字。准备好看一个循环并采取措施来避免它。 (例如在调用setContentOffset之前设置布尔实例变量并在scrollViewDidScroll中重新设置后跟return;

答案 2 :(得分:0)

继续以前的答案,提供更多信息,我生成了这段代码:

在界面(.h)中:

#import <UIKit/UIKit.h>

@interface DoubleTextViewController : UIViewController <UITextViewDelegate>

@property (strong, nonatomic) IBOutlet UITextView *textView1;
@property (strong, nonatomic) IBOutlet UITextView *textView1;

@end

在您的实施中(.m):

在定义相应的属性和全局变量后使用此viewDidLoad函数。

#import "DoubleTextViewController.h"

#define TEXT_VIEW_1_TAG 1001
#define TEXT_VIEW_2_TAG 1002

@interface DoubleTextViewController () {

    BOOL isScrolling;
}

@end

@implementation DoubleTextViewController

@synthesize textView1, textView2;

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view..

    isScrolling = NO;

    [self.textView1 setTag:TEXT_VIEW_1_TAG];
    [self.textView2 setTag:TEXT_VIEW_2_TAG];

    [self.textView1 setDelegate:self];
    [self.textView2 setDelegate:self];
}

并添加此功能以进行同步滚动。

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {

    if (isScrolling) {
        return;
    }


    isScrolling = YES;

    if (scrollView.tag == TEXT_VIEW_1_TAG) {

        [self.textView2 setContentOffset:scrollView.contentOffset animated:NO];

    } else if (scrollView.tag == TEXT_VIEW_2_TAG) {

        [self.textView1 setContentOffset:scrollView.contentOffset animated:NO];
    }

    isScrolling = NO;
}

正如Hermann Klecker所提出的,isScrolling变量会停止滚动循环并使用户体验更好。使用Fabian Kreiser提出的代码,一旦用户离开手指就会停止滚动,使其变得奇怪。