2010-10-21 3 views
23

Я пытаюсь создать собственное представление для моего нижнего колонтитула UITableView, в котором есть кнопка. Я могу видеть это, но когда я касаюсь его, ничего не происходит ... Вы можете увидеть, что здесь не так:UITableView footerView с кнопкой, кнопка не работает

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    if(self.tableView.tableFooterView == nil) { 
     //allocate the view if it doesn't exist yet 
     UIView *footerView = [[UIView alloc] init]; 

     //create the button 
     UIButton *addNewBtn = [UIButton buttonWithType:UIButtonTypeCustom];  
     //the button should be as big as a table view cell 
     [addNewBtn setFrame:CGRectMake(0, 0, 320, [AddMerchantTVC cellHeight])]; 

     //set title, font size and font color 
     [addNewBtn setTitle:@"Add New" forState:UIControlStateNormal]; 
     [addNewBtn.titleLabel setFont:[UIFont boldSystemFontOfSize:20]]; 
     [addNewBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; 
     [addNewBtn addTarget:self action:@selector(addNew:) forControlEvents:UIControlEventTouchUpInside]; 

     UIImageView *cellGradient = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"cellGradient.png"]]; 
     cellGradient.frame = CGRectMake(0, 54, 320, 16); 
     [footerView addSubview:cellGradient]; 

     //add the button to the view 
     [footerView addSubview:addNewBtn]; 
     footerView.userInteractionEnabled = YES; 
     self.tableView.tableFooterView = footerView; 
     self.tableView.tableFooterView.userInteractionEnabled = YES; 

     [footerView release]; 
     [cellGradient release]; 
} 

- (void)addNew:(id)sender { 
    // This is never called 
    NSLog(@"Touched."); 
} 

ответ

36

You» не устанавливая рамку footerView. Установите рамку footerView как минимум выше, чем кнопка, иначе штрихи не будут переданы кнопке.

+0

Вот и все. Спасибо! –

+1

Это работало для меня, когда я реализовал таблицу tableView: (UITableView *) tableView heightForFooterInSection: (NSInteger); ', чтобы указать высоту нижнего колонтитула. –

+0

Это тоже помогло мне, спасибо! –

-8

Создать подкласс UIView и включают в себя следующие методы:

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { 
    return [super hitTest:point withEvent:event]; 
} 

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event { 
    return [super pointInside:point withEvent:event]; 
} 
+0

ли мне действительно нужен подкласс UIView для достижения этой цели ? Если это так, это раздражает. –

0

Вы должны установить sectionFooterHeight свойство Tableview перед вызовом для viewForFooterInSection происходит (не может сделать это внутри метода viewForFooterInSection).

+0

Особенно, если вы используете XIB для создания UIView, вам необходимо реализовать эту функцию –

7
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section { 
    return 50.0f; 
} 

положить этот метод в вашем классе ваша проблема будет решить .....

1

его работал для меня, я просто добавить

footerView.frame =CGRectMake(0, 300, 100, 100);