UITableView中的Header接收用户事件

01 UIKIT_CLASS_AVAILABLE(2_0) @interface  UIControl : UIView {
02   @package
03     NSMutableArray* _targetActions;
04     CGPoint         _previousPoint;
05     CFAbsoluteTime  _downTime;
06     struct {
07         unsigned int disabled:1;
08         unsigned int tracking:1;
09         unsigned int touchInside:1;
10         unsigned int touchDragged:1;
11         unsigned int requiresDisplayOnTracking:1;
12         unsigned int highlighted:1;
13         unsigned int dontHighlightOnTouchDown:1;
14         unsigned int delayActions:1;
15         unsigned int allowActionsToQueue:1;
16         unsigned int pendingUnhighlight:1;
17         unsigned int selected:1;
18     unsigned int verticalAlignment:2;
19     unsigned int horizontalAlignment:2;
20     } _controlFlags;
21 }

由类UIController的定义可以看出,UIController是UIView的子类。但是UIController可以接收用户的Tap事件,所以,在必要的时候可以使用UIController代替UIView来使用。

例如近期正在做的一个App,需要是TableView中每个Section中的Header接收用户的点击事件以触发相应的操作,需要在方法- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section中做一些修改才可以处理用户的点击事件。

01 - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
02 {
03     UIControl *result = nil;
04      
05     result = [[UIControl alloc] initWithFrame:CGRectMake(0.0f, 0.0f, self.view.bounds.size.width, 34.0f)];
06     result.backgroundColor = [UIColor redColor];
07      
08     UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"web-icon.png"]];
09     imageView.frame = CGRectMake(2.0f, 2.0f, imageView.frame.size.width, imageView.frame.size.height);
10     [result addSubview:imageView];
11      
12     result.tag = section;
13     [result addTarget:self action:@selector(headerIsTapEvent:) forControlEvents:UIControlEventTouchUpInside];
14      
15     return result;
16 }

1 - (void)headerIsTapEvent:(id)sender
2 {
3     NSInteger sectionIndex = [sender tag];
4      
5     NSLog(@"%i", sectionIndex);
6 }

这样Section中的Header就可以接收用户的点击事件了。

你可能感兴趣的:(UITableView)