2013-06-06 6 views
1

Так технически это не UISwitch, а скорее UIView с помощью пользовательского класса, который ведет себя так же, как UISwitch (https://github.com/domesticcatsoftware/DCRoundSwitch)indexPath возвращает null для пользовательского UISwitch в ячейке tableView?

Я использую этот DCRoundSwitch на каждой строке таблицы. Я хочу получить indexPath строки, в которой включен DCRoundSwitch, но он возвращает значение null.

Вот как DCRoundSwitch настроен (использует измененное значение):

Tied Events

Вот мой метод togglePublic:

-(void)togglePublic:(UIControl *)button withEvent:(UIEvent *)event { 


    DCRoundSwitch *switch1 = (DCRoundSwitch *)button; 
    UITableViewCell *cell = (UITableViewCell *)switch1.superview; 
    NSIndexPath *indexPath = [self.tableview indexPathForCell:cell]; 

    NSLog(@"PUBLICSWITCH PRESSED %@", indexPath); 


    //NSIndexPath * indexPath = [self.tableview indexPathForRowAtPoint:[[[event touchesForView: button] anyObject] locationInView: self.tableview]]; 


    if (indexPath == nil){ 

     return; 

    } 


    AHBContact *contact = [self.contacts[indexPath.section] allValues][0][indexPath.row]; 

    NSLog(@"Public switch toggled for: %@", contact); 


} 

Как вы можете видеть, indexPath возвращает ноль, как если оператор всегда возвращает метод до того, как мы перейдем к сообщению журнала «Коммутатор, переключенный для:».

ответ

4

Убедитесь, что switch1.superview фактически возвращает ячейку, как вы здесь.

Иногда вы получите нечетные слои родительских представлений, которых вы не ожидали.

+0

хорошая идея. что хороший/быстрый способ проверить, что он возвращает? – Rohan

+0

nvm. получил это - ты был прав! это был один ребенок ниже, чем ожидалось. – Rohan

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