2013-11-15 1 views
0

Я реализующий NSNotifications в UITableViewHeaderFooter подкласса, потому что я хочу, чтобы изменить название section при нажатии на один row этого section.In UITableViewHeaderFooter там есть observer и в tableViewController это postnotification. Я зарегистрировал объект уведомления в наблюдателе, и я вижу журнал много раз, так как разделы находятся в tableview, для меня это неплохо, потому что я могу управлять им, передавая indexPath.section, но это нормально? Могу ли я иметь проблемы, если у меня есть больше разделов? Есть ли способ справиться с этим?NSNotification называется много раз, когда наблюдатель находится в UITableViewHeaderFooter подклассе

Как я сказал Joiningss в другом вопросе, у меня есть проблемы с заголовком раздела, когда я прокрутка в Tableview, изменение заголовка и показать название, которое я имел прежде. (Проблемы переиспользуемости ..)

Вот мой код (Прости меня за код это просто тест)

Первый мой заказ HeaderFooterView:

- (id)initWithReuseIdentifier:(NSString *)reuseIdentifier { 
    self = [super initWithReuseIdentifier:reuseIdentifier]; 
    if (self) { 
     self.contentView.backgroundColor = [UIColor blackColor]; 
     textLabel = [[UILabel alloc] initWithFrame:CGRectMake(5, 5, 200, 14)]; 
     [textLabel setTextColor:[UIColor whiteColor]]; 
     [textLabel setFont:[UIFont systemFontOfSize:14]]; 
     [textLabel setBackgroundColor:[UIColor clearColor]]; 

     [self.contentView addSubview:textLabel]; 
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(somethingHappens:) name:@"notificationName" object:nil]; 


    } 
    return self; 
} 

-(void) somethingHappens:(NSNotification*) notification 
{ 
    NSLog(@"Notification %@", notification); 
    NSDictionary *notificationDic = notification.object; 
    NSString *title = [notificationDic valueForKey:@"title"]; 
    NSIndexPath *indexPath = [notificationDic objectForKey:@"index"]; 
    [self configureHeaderSectionWithString:title andSection:indexPath.section]; 
} 
-(void)configureHeaderSectionWithString:(NSString *) text andSection:(NSInteger)section 
{ 
    if(self.section == section) 
    textLabel.text = text; 
} 

Вот мои методы Tableview для реализации этого:

+1

Пожалуйста, покажите код, где вы регистрируетесь и отправляете уведомления – bengoesboom

+0

Не стесняйтесь! Просто никогда не добавляйте наблюдателя более одного раза для просмотра в разрезе. Как bengoesboom говорит, покажите код, где вы регистрируетесь и отправляете уведомления! – Joiningss

+0

Хорошо, он уже отредактирован. Спасибо – croigsalvador

ответ

1

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

1.remove lastNotificationTitle и lastNotificationSection, добавьте NSMutableDictionary * notificationTitlesDic

2.chang somethingHappens: и configureHeaderSectionWithString: с кодом:

-(void) somethingHappens:(NSNotification*) notification 
    { 
     NSLog(@"Notification %@", notification); 
     NSDictionary *notificationDic = notification.object; 
     NSString *title = [notificationDic valueForKey:@"title"]; 
     NSIndexPath *indexPath = [notificationDic objectForKey:@"index"]; 
     [self.notificationTitlesDic setObject:title forKey:[NSString stringWithFormat:@"%d",indexPath.section]]; 
     if(self.section == indexPath.section){ 
      textLabel.text = title; 
     } 
    } 


-(void)configureHeaderSectionWithString:(NSString *) text andSection:(NSInteger)section 
    { 
     NSString * targetKey = [NSString stringWithFormat:@"%d",section]; 
     for (NSString * key in self.notificationTitlesDic) { 
      if([targetKey isEqualToString:key]){ 
       textLabel.text = [self.notificationTitlesDic valueForKey:key]; 
       return; 
      } 
     } 
     textLabel.text = text; 
    } 

есть тест с моим testless кодом:]

+0

Идеально подходит для проблем повторного использования. Он работает отлично. Итак, тогда, если у меня есть такое же количество уведомлений, что и разделы, это не проблема, не так ли? – croigsalvador

+1

Уведомления легкий, без проблем. – Joiningss

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