我已经做了一些环顾四周,但我找不到任何清楚解释如何同时滚动两个不可编辑的UITextViews的东西。我想我可能需要使用scrollRangeToVisible
或setContentOffset
,但我无法让其中任何一个工作。
有没有人有任何关于这方面的例子/样本或文件,他们可以指向我?
编辑:为了澄清,我希望能够滚动一个UITextView,并在第二个UITextView上反映滚动的结果。
谢谢!
答案 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提出的代码,一旦用户离开手指就会停止滚动,使其变得奇怪。