2

我不知道为什么这UIButton在我的UITableView. 它出现在那里,但触摸不起作用。

NSLog 语句也没有触发。几乎就像它在另一个视图或其他东西的下方,以便您可以看到它,但按下操作不起作用。

感谢您对此的任何帮助

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

UIView *sectionHeader = [[UILabel alloc] initWithFrame:CGRectNull];
sectionHeader.backgroundColor = [UIColor clearColor];

[sectionHeader addSubview:self.topMapView];

// add map launch button
mapLaunchButton = [UIButton buttonWithType:UIButtonTypeCustom];
[mapLaunchButton addTarget:self
                    action:@selector(mapButtonTouch:)
          forControlEvents:UIControlEventTouchDown];
[mapLaunchButton setTitle:@"ggggggg" forState:UIControlStateNormal];
mapLaunchButton.frame = CGRectMake(0, 0, 300, 90);
mapLaunchButton.backgroundColor = [UIColor redColor];

[sectionHeader addSubview:mapLaunchButton];


  //  [sectionHeader bringSubviewToFront:mapLaunchButton];

    self.tableView.tableHeaderView = sectionHeader;

    return sectionHeader;

}
- (void)mapButtonTouch:(id)sender {

    NSLog(@"map button was touched");
}
4

5 回答 5

2

如果更改UIControlEventTouchDownUIControlEventTouchUpInside?

于 2013-10-28T19:31:56.037 回答
2

我可以看到不止一个错误-

  1. 如果您的表格只有一个部分(以验证此numberOfSectionsInTableView委托检查),则删除此行 -

    self.tableView.tableHeaderView = sectionHeader;

  2. 设置sectionHeader.frame为适当的(不是CGRectNull)。设置节标题(相对于表标题视图)的好处是,当用户滚动表行时,节标题将粘在顶部(浮动)并且不会消失。(素色表)

  3. 问题还是没有解决,那就请验证他的方法——

    -(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { return 50; // 取决于 sectionHeader 的高度 }

  4. 正如其他海报所指出的,在 UIButton 上捕获触摸事件UIControlEventTouchUpInside是首选事件。

编辑- (作为表头视图实现)

如果要将其向上滚动,请将其设置为表格标题(而不是部分标题)。因此,从 viewForHeaderInSection 中删除所有这些并将其放在viewDidLoad您的视图控制器类中。保留这一行(在这种情况下不要删除它) -

self.tableView.tableHeaderView = sectionHeader;

但是,以上第 2 点和第 4 点仍然适用。

于 2013-10-28T19:41:27.470 回答
1

一件事是section header,另一件事是table header。您正在为两者分配相同的视图。我不确定这是您问题的原因,但它可以帮助您入门。

而不是实现该方法,在您的 viewDidLoad 上,创建该视图并将其分配为self.tableView.tableHeaderView

此外,最常见的用户体验与UIControlEventTouchUpInside(直到手指抬起并仍在按钮内时才会执行操作)。但是,这可能与您的问题无关。这只是何时调用动作的问题。

如果这不能解决您的问题,请告诉我,我会尝试检查是否还有其他我遗漏的东西

干杯!

于 2013-10-28T19:38:27.763 回答
0

我有同样的问题。在以下行中将 UIXXXXX 从 UILabel 更改为 UIView 对我有用:

 UIView *sectionHeader = [[UIXXXXX alloc] initWithFrame:CGRectNull];

我没有使用:

 self.tableView.tableHeaderView = sectionHeader;
于 2014-03-11T18:45:24.327 回答
0

如果添加视图

self.tableView.tableHeaderView = ({
        UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 184.0f)];

您可以添加新组件:UIImageView, UIlabel... 它对我有用!我测试过。

最终代码:

    self.tableView.tableHeaderView = ({
        UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 184.0f)];
        UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 40, 100, 100)];
 imageView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;
        imageView.image = [UIImage imageNamed:@"avatar.jpg"];
        imageView.layer.masksToBounds = YES;
        imageView.layer.cornerRadius = 50.0;
        imageView.layer.borderColor = [UIColor whiteColor].CGColor;
        imageView.layer.borderWidth = 3.0f;
        imageView.layer.rasterizationScale = [UIScreen mainScreen].scale;
        imageView.layer.shouldRasterize = YES;
        imageView.clipsToBounds = YES;
UIButton  *mapLaunchButton = [UIButton buttonWithType:UIButtonTypeCustom];
        [mapLaunchButton addTarget:self action:@selector(mapButtonTouch:) forControlEvents:UIControlEventTouchDown];
        [mapLaunchButton setTitle:@"ggggggg" forState:UIControlStateNormal];
        mapLaunchButton.frame = CGRectMake(0, 0, 300, 90);
        mapLaunchButton.backgroundColor = [UIColor redColor];
        [view addSubview:imageView];
        [view addSubview:mapLaunchButton];
        view;
 });
于 2015-05-10T08:55:41.650 回答