У меня есть UICollectionView
, который использует - (void)scrollViewDidScroll:(UIScrollView *)scrollView
, чтобы определить, когда пользователь прокрутил страницу вниз.Выполнение селектора на superView
У владельца моего UICollectionView
есть метод, который отправляет команду серверу и запрашивает больше данных.
Что я хочу сделать, это выполнить селектор на собственнике (мой диспетчер представлений) с моего UICollectionView
, и в частности, с scrollViewDidScroll
.
Я пытаюсь сделать это, используя следующий код:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
CGFloat offsetY = scrollView.contentOffset.y;
CGFloat contentHeight = scrollView.contentSize.height;
if (offsetY > contentHeight - scrollView.frame.size.height)
{
[[self superView] performSelector:@selector(onScrolledToBottom) withObject:nil];
}
}
Примечание: селектор onScrolledToBottom
является SEL
свойство моей UICollectionView
.
Ошибка я получаю говорит:
-[UIView onScrolledToBottom]: unrecognized selector sent to instance 0x7fc641e76e00
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIView onScrolledToBottom]: unrecognized selector sent to instance 0x7fc641e76e00'
EDIT
Я раздели свой код, чтобы уместить на этот вопрос.
У меня есть followin в моем ViewController.m
....
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[self initCollectionView];
}
....
- (void) getMoreInfo{
NSLog(@"Getting more info");
}
- (void) initCollectionView{
UICollectionViewFlowLayout* flowLayout = [[UICollectionViewFlowLayout alloc]init];
flowLayout.itemSize = CGSizeMake(50.0, 60.0);
flowLayout.sectionInset = UIEdgeInsetsMake(20, 0, 20, 0);
[flowLayout setScrollDirection:UICollectionViewScrollDirectionVertical];
flowLayout.headerReferenceSize = CGSizeMake(320.f, 30.f);
myCollectionView *mVC = [myCollectionView alloc] init: self.view: flowLayout: @selector(getMoreInfo)];
}
И для моих myCollectionView
в .h
и .m
файлы выглядят следующим образом:
#import <UIKit/UIKit.h>
@interface myCollectionView : UICollectionView<UIScrollViewDelegate, UICollectionViewDelegate, UICollectionViewDataSource>{
UIView *parentView;
SEL onScrolledToBottom;
}
@property UIView *parentView;
@property SEL onScrolledToBottom;
- (id)init: (UIView*) parent: (UICollectionViewLayout *)layout: (SEL)onScrolledToBottomSEL;
@end
и
#import "myCollectionView.h"
@implementation myCollectionView
@synthesize parentView = parentView;
@synthesize onScrolledToBottom = onScrollToBotton;
- (id)init: (UIView*) parent: (UICollectionViewLayout *)layout: (SEL)onScrolledToBottomSEL{
self = [super initWithFrame: CGRectMake(0.0f, 0.0f, parent.frame.size.width, parent.frame.size.height) collectionViewLayout: layout];
if (self) {
parentView = parent;
self.delegate = self;
self.dataSource = self;
onScrolledToBottom = onScrolledToBottomSEL;
}
return self;
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
CGFloat offsetY = scrollView.contentOffset.y;
CGFloat contentHeight = scrollView.contentSize.height;
if (offsetY > contentHeight - scrollView.frame.size.height)
{
[parentView performSelector:@selector(onScrolledToBottom) withObject:nil];
}
}
Можете ли вы показать декларацию метода 'onScrolledToBottom' – Saif
@saif Я не совсем уверен, что вы имеете в виду. Вы имеете в виду, если я поместил его в '.h' моего ViewController? – vaid
Да, поместите файл заголовка. – Saif