iPhone: Как определить, какой Scrollview вызывает методы делегата? - PullRequest
1 голос
/ 03 марта 2010

Ответ на этот вопрос, вероятно, прямо у меня под носом, но я его не вижу. Может быть, кто-то здесь может помочь.

У меня есть scrollView, который позволяет вертикальную прокрутку. Я настроил это:

[clefScrollView addSubview:clefView];
[clefScrollView setContentSize:CGSizeMake(clefView.frame.size.width, clefView.frame.size.height)];
clefScrollView.showsVerticalScrollIndicator = YES;
clefScrollView.showsHorizontalScrollIndicator = NO;
clefScrollView.delegate = self;

У меня есть следующие методы, включенные в тот же файл, для поддержки протокола UIScrollViewDelegate:

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
    NSLog(@"%f %f", scrollView.contentOffset.y, scrollView.contentSize.height);
}

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    NSLog(@"scrollViewDidEndDecelerating");
}

- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView
{
    NSLog(@"scrollViewDidEndScrollingAnimation");
}

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    NSLog(@"scrollViewDidScroll");
}

Кроме того, файл .h для моего класса включает протокол:

@interface ClefNotesViewController : UIViewController <UIActionSheetDelegate,UIScrollViewDelegate,DoneWithVCDelegate> {

Проблема в том, что, несмотря ни на что, следующие два никогда не называются:

    -scrollViewDidEndDecelerating
    -scrollViewDidScroll

Два других метода вызывают в ответ на разные события. Учитывая, что два метода протокола вызывают, я предполагаю, что я правильно установил делегата на себя. Итак, в чем проблема?

Спасибо!

Обновление: я обнаружил проблему, хотя до сих пор не понял, как ее решить. Мой класс охватывает два файла. Во втором файле другой scrollView реализует -scrollViewDidEndDecelerating -scrollViewDidScroll

Вопрос в том, как определить два разных набора методов для двух разных UIScrollViews в одном классе?

Я мог бы попытаться обработать два scrollView с одинаковыми методами делегатов, но это ужасно, так как я не смогу сохранить каждый набор делегатов с файлом scrollView. Я мог бы также разделить мой класс. Есть ли другой способ?

Ответы [ 2 ]

2 голосов
/ 03 марта 2010

Вам просто нужно сравнить указатели с тем, что передается в методы

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
    if(scrollView == self.firstScrollView){
          // do something
    }
    else if(scrollView == self.secondScrollView){
          // do something else
    }
}

Предполагается, что ваши прокрутки являются свойствами класса. Я уверен, что сравнение указателей здесь хорошо. Если это доставляет вам проблемы, используйте что-то вроде

if(scrollView.tag == self.firstScrollView.tag)

Вам нужно будет присвоить им тег при создании

1 голос
/ 03 марта 2010

Вопрос в том, как я могу определить два различные наборы методов для двух разные UIScrollViews, в том же класс

Методы делегатов принимают объекты scrollview в качестве своих параметров. Вы должны проверить, какой scrollview передается и ответить соответственно. Вы можете установить свойство тега каждого scrollview, чтобы идентифицировать их.

...