2015-03-17 3 views
0

У меня возникла странная проблема. Я пытаюсь вызвать void функцию программно, функция void является seguent:Невозможно вызвать функцию (void) программно

- (void)expView:(ExpandableTableView *)expView didExpandAtIndex:(NSInteger)index { 
    /* CODE HERE */ 
} 

так, если я правильно понимаю, эта функция принимает два параметра: expView, класса ExpandableTableView и index из NSInteger типа , Если вам интересно, что такое ExpandableTableView, это подкласс UITableView, импортированный из this Проект GitHub, который я использую для создания UITableView с расширяемой ячейкой в ​​моем проекте.

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

[self expView:nameOfTheExpandableTableView didExpandAtIndex:1]; 

И я не могу понять, почему. Кроме того, UITableView, которые мне нужно расширить программно не был создан с помощью раскадровки, поэтому я назначил его «выход» с for in цикла в viewDidLoad

Это мой код:

@interface ViewController() { 
    ExpandableTableView *customizedTableView; 
} 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    /* HERE I SEARCH FOR ALL EXPANDABLETABLEVIEW(s) */ 
    for (customizedTableView in [self.view subviews]) { 
     if ([customizedTableView isKindOfClass:[ExpandableTableView class]]) { 
      [self expView:customizedTableView shouldExpandAtIndex:1]; 
     } 
    } 
} 

- (BOOL)expView:(ExpandableTableView *)expView shouldExpandAtIndex:(NSInteger)index { 
    /* THIS FUNCTION IS CALLED JUST BEFORE THE VOID ONE */ 
    return index; 
} 

- (void)expView:(ExpandableTableView *)expView didExpandAtIndex:(NSInteger)index { 

} 

Код работает, фактически, если я пытаюсь использовать точки останова, чтобы проверить, что все вызвано [даже функция void], но ничего не происходит.

Вы можете мне помочь?

+0

В чем проблема? Вы называете, что вы не можете вызвать функцию, но последнее предложение говорит, что оно вызывается. – rdelmar

+0

Так что проблем с компиляцией и viewDidLoad не вызывается? – Wain

+0

@Wain Да, нет компиляции проблем, и viewDidLoad правильно называется – Aluminum

ответ

0

The project you link to, как представляется, не определяет API для программно расширяющихся ячеек таблицы.

Кажется, что вы делаете в своем коде, вызывает обратный вызов делегата и ожидает, что что-то произойдет. Методы делегата вызываются из экземпляра ExpandableTableView, чтобы задать вам (делегат), должна ли конкретная ячейка расширяться (expView:shouldExpandAtIndex:) или уведомить вас, когда ячейка развернута (expView:didExpandAtIndex:).

Что представляет класс, является методом делегата для установки определенных ячеек, которые будут расширены «по умолчанию» (при начальной загрузке и после вызова -reloadData, насколько я могу судить): -expandableTableView:sectionExpandedByDefault:.

Так, например, если вы только хотели все остальные ячейки, чтобы быть расширена, когда представление таблицы нагрузок, вы можете реализовать метод делегата, как так:

- (BOOL)expandableTableView:(ExpandableTableView *)expandableTableView sectionExpandedByDefault:(NSInteger)section { 
    if (section % 2 == 0) { 
     return YES; 
    } else { 
     return NO; 
    } 
} 

Если это не подходит для чего вы вам, вероятно, придется погрузиться в реализацию и написать ее самостоятельно (не должно быть слишком сложно, так как логика уже существует для прослушивания на ячейке).

1

Вы на самом деле никогда не вызывается метод, вы говорите:

Я пытаюсь использовать точки останова, чтобы проверить, что все вызывается [даже функция пустоты], но ничего не происходит.

Что вы имеете в виду? Фактически срабатывает точка останова внутри expView:didExpandAtIndex:? Если это правда (я не понимаю, как это можно было назвать, но в любом случае), логично, что ничего не происходит, потому что там нет кода.

Другое дело в том, что вы делаете ничего с возвращаемой индексом из expView:shouldExpandAtIndex:

Короче говоря, ваш код немного странно. Я мог бы помочь вам, если вы более четко объясните, что вы пытаетесь сделать.

Смежные вопросы