Я теряю свои методы UIScrollViewdelegate по умолчанию, когда я делаю его подкласс - PullRequest
0 голосов
/ 26 февраля 2011

Я пытаюсь создать подкласс для UScrollview, но в итоге он теряет метод делегата UIScrollview по умолчанию.

#import <UIKit/UIKit.h>
@protocol myscrollviewDelegate <NSObject>
-(void) myscrollview_return;
@end

@interface myscrollview : UIScrollView <UIScrollViewDelegate> {
      id<myscrollviewDelegate> delegate;
}

@property(nonatomic, assign)  id<myscrollviewDelegate> delegate;

@end
  • (void) scrollViewDidEndDecelerating: (UIScrollView *) scrollView

никогда не вызывается при прокрутке.

что не так? Могу ли я создать подкласс UIScrollview и добавить дополнительный делегат, сохраняя при этом исходные делегаты ??

Ответы [ 3 ]

1 голос
/ 26 февраля 2011

Вы не добавляете свойство, а переопределяете его, так как UIScrollView уже имеет свойство делегата.Когда вы устанавливаете делегат, используя новое свойство, ссылка будет сохранена в добавленной вами переменной экземпляра, а не в закрытой переменной экземпляра исходного UIScrollView.

Моя теория состоит в том, что реализация UIScrollView обращается к переменной экземпляра без использования свойства.Я не проверял это, но попробуйте не добавлять новый ivar и не переопределять свойство делегата.

0 голосов
/ 26 сентября 2012

Вы можете сделать это без создания второго свойства делегата.

Во-первых, сделайте ваш протокол делегата наследуемым от UIScrollViewDelegate:

@protocol myscrollviewDelegate <NSObject, UIScrollViewDelegate>

Затем объявите свойство делегата в вашем заголовке для вашего класса:

@interface myscrollview : UIScrollView <UIScrollViewDelegate>
@property(nonatomic, assign)  id<myscrollviewDelegate> delegate;

И ключ к не , чтобы синтезировать свойство, а сделать его динамическим в вашем файле реализации.

@implementation myscrollview
@dynamic delegate;
...
0 голосов
/ 11 апреля 2011

Это потому, что вы реализуете методы делегата с идентификатором делегата; я надеюсь, что это так так что поменяйте имя делегата. вместо использования делегата используйте другое имя, например «DelegateSomeClass» и т. д. Теперь метод делегатов UIscrollView вызывает

надеюсь, это прояснится:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...