2013-07-01 5 views
0

Я сделал пользовательскую кнопку с помощью drawRect: и поместил ее в свой headerview для моего стола. Я хочу, чтобы пользовательская кнопка была скрыта при выборе режима редактирования. я знаю, что я могу сделать это с помощью метода:Как скрыть пользовательскую кнопку, когда включен режим редактирования?

-(void)setEditing:(BOOL)editing animated:(BOOL)animated 

, но по какой-то причине, моя кнопка на самом деле не исчезающий, когда я либо 1) установить его на ноль, 2) или использовать button.hidden свойство. Вот мой код:

TableViewController.h:

@interface ToDoTableViewController : UITableViewController <Properties2ViewControllerDelegate, UITableViewDelegate>{ 
    addButtonView *button; 
} 
@property (strong, nonatomic) NSMutableArray *taskArray; 
@property (strong, nonatomic) NSMutableArray *completedArray; 
-(IBAction)addCell:(id)sender; 
-(void)buttonPressed:(id)sender; 
@end 

TableViewController.m

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{ 
    UIView *headerView; 
    UIView *seperatorView; 

    CGRect testFrame = CGRectMake(280.0, 5.0, 30.0, 30.0); 
    button = [[addButtonView alloc]initWithFrame:testFrame]; 

    NSString *sectionTitle = @"Incomplete Tasks"; 
    NSString *section2Title = @"Completed Tasks"; 
    UILabel *label = [[UILabel alloc]init]; 
    label.textColor = [UIColor colorWithRed:236.0/255 green:240.0/255 blue:241.0/255 alpha:1.0f]; 
    label.font = [UIFont fontWithName:@"HelveticaNeue-Light" size:25]; 
    label.backgroundColor = [UIColor clearColor]; 
    label.frame = CGRectMake(10.0, 0.0, 320.0, 40.0); 
    headerView = [[UIView alloc]initWithFrame:label.frame]; 

    [button addTarget:self action:@selector(addCell:) forControlEvents:UIControlEventTouchUpInside]; 
    [button addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside]; 

    CGRect sepFrame = CGRectMake(0, headerView.frame.size.height-2, 320, 1); 
    seperatorView = [[UIView alloc] initWithFrame:sepFrame]; 
    seperatorView.backgroundColor = [UIColor colorWithRed:236.0/255 green:240.0/255 blue:241.0/255 alpha:1.0f]; 
    [headerView addSubview:seperatorView]; 

    switch (section) { 
     case 0: 
      label.text = sectionTitle; 
      [headerView addSubview:label]; 
      [headerView addSubview:button]; 
      break; 
     case 1: 
     label.text = section2Title; 

      [headerView addSubview:label]; 
      // if (completedArray == nil) 
      // headerView.hidden = YES; 
      break; 

    } 
    return headerView; 
} 

-(void)setEditing:(BOOL)editing animated:(BOOL)animated{ 
    [super setEditing:editing animated:animated]; 

    if([self isEditing]){ 
     button.hidden = YES; 
    }else { 
     button.hidden = NO; 
    } 
} 

--- EDIT ----

-(void)setEditing:(BOOL)editing animated:(BOOL)animated{ 
    [super setEditing:editing animated:animated]; 

    if([self isEditing]){ 
     button.hidden = YES; 
     [[self tableView] reloadData]; //shouldn't this make the button dissapear? 
    }else { 
     button.hidden = NO; 
    } 
} 

ответ

0

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

При возврате заголовка создайте его один раз и всегда возвращайте один и тот же экземпляр, а затем измените свойство hidden. Или, проверьте, если таблица isEditing каждый раз, когда заголовок создан, и решите, что делать в результате.


Давайте идти с более эффективным вариантом повторного использования заголовка:

  1. Создать свойство удерживать вид заголовка (ы) - массив.
  2. В viewDidLoad создайте представления заголовков (используя ваш текущий код, но перейдем к другому методу).
  3. Добавить точку заголовка объекта (убедитесь, что вы инициализируете массив первого)
  4. Изменения viewForHeaderInSection просто возвращают заголовок из массива (на основе section)
  5. В setEditing: итерации по массиву и скрыть/показать каждый кнопка

(Вы можете хранить кнопки в другом массиве, чтобы сделать это легко)

+0

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

+0

Вам нужно изменить 'viewForHeaderInSection', чтобы он работал. Если вы всегда воссоздаете кнопку в 'viewForHeaderInSection', тогда старая кнопка будет скрыта всегда. Изменение 'setEditing:' не может решить проблему. – Wain

+0

Как мне создать заголовок один раз и вернуть тот же экземпляр, что и вы сказали? (на основе моего текущего viewForHeaderInSection – EvilAegis

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