2013-07-01 2 views
0

drawRect :를 사용하여 사용자 지정 단추를 만든 다음 내 tableview에 대한 내 headerview에 넣습니다. 편집 모드를 선택하면 사용자 지정 단추를 숨기고 싶습니다.편집 모드를 사용하는 경우 맞춤 검색 버튼을 숨기는 방법은 무엇입니까?

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

을하지만이 중 1) 2) 또는 button.hidden 속성을 사용, 전무로 설정하면 어떤 이유로, 내 버튼을 실제로 dissapearing되지 않은 : 나는 그 방법을 사용하여 수행 할 수 있습니다 알고 있습니다.

이 TableViewController.h

:

-(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; 
    } 
} 

은 --- 편집 테이블 뷰가

-(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

@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입니다 ---- 때마다 여기에 내 코드입니다 새로 고침 버튼을 포함하여 전체 헤더를 다시 작성합니다. 따라서 이전 버튼을 숨김으로 설정 한 다음 파괴되어 새로운 가시적 인 버튼으로 대체 될 수 있습니다.

헤더를 반환 할 때 한 번만 만들고 항상 같은 인스턴스를 반환하면 hidden 속성을 변경하면 작동합니다. 또는 헤더가 생성 될 때마다 isEditing 테이블이 있는지 확인하고 결과로 수행 할 작업을 결정하십시오.


의가보다 효율적으로 헤더 재사용 옵션과 함께 가자 :

  1. 헤더보기 (들)을 보유하는 속성 만들기 - 배열을.
  2. viewDidLoad에서 (현재 코드를 사용하지만 다른 방법으로 이동 한) 헤더보기를 만듭니다.
  3. 각을 보여/단지 배열을 통해 setEditing:으로 반복에서 (section 기준) 배열
  4. 에서 헤더를 반환
  5. 변경 viewForHeaderInSection (먼저 배열을 초기화 확인) 재산에 헤더 뷰를 추가하고 숨기기 버튼을

+0

은 내가 변경 것과 주요 포스트 업데이트 (당신은 쉽게 다른 배열에있는 버튼을 저장할 수). 피드백을 기반으로 을 입력하십시오. 왜이 기능이 작동하지 않습니까? 나는 버튼을 숨기고 그 버튼을 숨길 수 있도록 뷰를 다시로드하고있다. – EvilAegis

+0

작동하려면'viewForHeaderInSection'을 변경해야합니다. 'viewForHeaderInSection'에있는 버튼을 항상 재 작성한다면, 이전 버튼을 숨김으로 설정하는 것은 항상 손실됩니다. 'setEditing :'을 변경해도 문제가 해결되지 않습니다. – Wain

+0

헤더를 한 번 만들고 앞에서 말한 것과 같은 인스턴스를 반환하는 방법은 무엇입니까? (내 현재 viewForHeaderInSection을 기반으로 – EvilAegis

관련 문제