@anonymous22

Передача данных View Controller — View, странное поведение?

У меня есть View Controller (PagedFlowView) который содержит в себе custom view (Collapse click).
По сути, у моего View Controller есть метод
- (UIView *)flowView:(PagedFlowView *)flowView cellForPageAtIndex:(NSInteger)index;

Который очень похож по своим свойствам на метод Table View
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;

В коде который представлен ниже я использую этот метод в моем View Controller(pagedFlowView) для создания custom view(Collapse click) и передаю индекс страницы property someData
- (UIView *)flowView:(PagedFlowView *)flowView cellForPageAtIndex:(NSInteger)index{
        
        mainDetailV = (MainDetailView *)[flowView dequeueReusableCell];
        
        if (!mainDetailV) {//creating pages flow one by one
            mainDetailV = [[[NSBundle mainBundle] loadNibNamed:@"MainDetailView"  owner:self    options:nil] lastObject];
            mainDetailV.layer.masksToBounds = YES;
        }
        mainDetailV.shouldDraw = YES;
        mainDetailV.someData = [NSString stringWithFormat:@"%i",index];//transfer index to custom view
        return mainDetailV;
    }

Этот код создает n страниц с view в котором есть некоторое property. Я передаю индекс страницы в это property(mainDetailV.someData), для того что бы использовать индекс.

В моем custom view(Collapse click) я инициализирую мой view в методе - (void)drawRect:(CGRect)rect; , да я понимаю что это не очень хорошо для производительности но на этом этапе меня это не интересует.

Я инициализирую view в коде представленном ниже:
- (void)drawRect:(CGRect)rect{
        [self initMehod];
    }
    
    -(void) initMehod{
     
        myCollapseClick.CollapseClickDelegate = self;
    
        myCollapseClick.alpha = 0.8;    
        [myCollapseClick reloadCollapseClick];
    }

Как можно увидеть из документации, я использую метод
-(NSString *)titleForCollapseClickAtIndex:(int)index
;, для того что бы поставить индекс страницы (используемый ранее):
-(NSString *)titleForCollapseClickAtIndex:(int)index {
        return someData;
    }

Как видно из кода, все довольно просто. Но моя проблема заключается в следующем: когда я передаю индекс и мои views отображаются, я вижу у них в title следующие индексы: 1 2 3 8 4 7 5 6, но не индексы от 1 до 8 (по возрастанию).

Я понимаю что это весьма специфический вопрос. Но может у кого то есть идеи, что я делаю не правильно?

***EDIT:***

Когда я пытаюсь вывести в консоль индекс в следующем методе
- (UIView *)flowView:(PagedFlowView *)flowView cellForPageAtIndex:(NSInteger)index{
         
            mainDetailV = (MainDetailView *)[flowView dequeueReusableCell];
            
            if (!mainDetailV) {//creating pages flow one by one
                mainDetailV = [[[NSBundle mainBundle] loadNibNamed:@"MainDetailView"  owner:self    options:nil] lastObject];
                mainDetailV.layer.masksToBounds = YES;
            }
            
            mainDetailV.shouldDraw = YES;
            mainDetailV.someData = [NSString stringWithFormat:@"%i",index];//transfer index to custom view
            NSLog(@"%li",index); // HERE
            
            return mainDetailV;
        }

Результат в консоле весьма странный:

1
2
3
4
5
6
7
1
2
3
4
5
6
7
и после скроллинга на следующий View
3
4
5
6
7
и т.д.

Спасибо!

Вопрос на StackOverflow
  • Вопрос задан
  • 3033 просмотра
Решения вопроса 1
Flanker_4
@Flanker_4
Когда я пытаюсь вывести в консоль индекс в следующем методе

Ну давайте поиграем в телепатов. Мой ход.
Беглый взгляд на код PagedFlowView заставляет ужаснуться, так как перезагрузка этой кастомной таблицы происходит в layoutSubviews по некоему флагу _needsReload, который приватный (1), при инициализации приложения устанавливается в YES(2) и... больше никогда не сбрасывается(3). Таким образом, каждый раз, когда этому PagedFlowView посылается setNeedsLayout он перезагружает данные из дата соурса. А setNeedsLayout вызывается наверное часто....

Насчет первого, а бог его знает. половину кода нет, тут даже угадать сложно
Ну а это вообще что-то термоядерное
- (void)drawRect:(CGRect)rect{
[self initMehod];
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Ne0nX
Мог бы ты скинуть тестовый проект?
Возможно проблема в PagedFlowView.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы