iOS - Прокрутка двух UITextViews одновременно - PullRequest
0 голосов
/ 01 сентября 2011

Я немного осмотрелся, но не смог найти ничего, что бы четко объясняло, как я могу одновременно прокручивать два не редактируемых UITextViews.Я думаю, что мне может понадобиться либо scrollRangeToVisible, либо setContentOffset, хотя я не смог заставить ни одного из них работать.

Есть ли у кого-нибудь примеры / образцы или документация по этому поводу, на которые они могли бы указать мне?

РЕДАКТИРОВАТЬ: Чтобы уточнить, я хотел бы иметь возможность прокрутить один UITextView, и иметьизменения в результате прокрутки, отображаемой на втором UITextView.

Спасибо!

Ответы [ 3 ]

1 голос
/ 02 сентября 2011

Используйте методы UIScrollViewDelegate, чтобы получить информацию о действиях прокрутки в первом представлении прокрутки, а затем прокрутить второе программно следующим образом:

- (void) scrollViewDidScroll:(UIScrollView *)view1 {
    scrollView2.contentOffset = view1.contentOffset;
}
0 голосов
/ 03 ноября 2014

Продолжая предыдущие ответы, чтобы дать больше информации, я сгенерировал этот код:

В интерфейсе (.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;
}

Как предложеноГерман Клекер, переменная isScrolling останавливает циклы прокрутки и делает работу с пользователем приятнее.Использование кода, предложенного Фабианом Крейзером, останавливает прокрутку, как только пользователь оставляет палец, что делает его странным.

0 голосов
/ 01 сентября 2011

Реагируйте на

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

и установите scrollView другого пользователя setContentVisible в соответствии с scrollView.contentOffset.

Имейте в виду, что некоторые методы UIScrollView будут вызывать scrollViewDidScroll, даже если они вызываются программно.Это относится к scrollRangeToVisible и будет заканчиваться циклом, если вы не предпримете действия, чтобы предотвратить этот цикл.Я не думаю, что setContentOffset или настройка scrollView2.contentOffset = CGPointMake(..,..) вызывает scrollViewDidScroll.Однако я бы не стал подписывать это кровью.Будьте готовы увидеть петлю и принять меры, чтобы ее избежать.(например, переменная логического экземпляра устанавливается перед вызовом setContentOffset и переустанавливается в scrollViewDidScroll с последующим return;)

...