在 TableViewHeader 中以编程方式调用 IBAction
Posted
技术标签:
【中文标题】在 TableViewHeader 中以编程方式调用 IBAction【英文标题】:Calling IBAction Programmatically in TableViewHeader 【发布时间】:2011-09-15 11:03:33 【问题描述】:我正在我的 TableView Header 单元格中以编程方式创建一个按钮,并向其添加 TouchUpInside Action。带有 UIButton 的 Header 还包含另外两个 UILabel。
问题:如果按钮被添加为子视图,它没有响应。
但是当我从 Method 只返回 UIButton 时它工作正常。
这是我的- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
代码
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
UIView *viewHeader = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 320, 60)];
viewHeader.tag = 101;
viewHeader.backgroundColor = [UIColor cyanColor];
UIButton *btnBack = [UIButton buttonWithType:UIButtonTypeRoundedRect];
btnBack.frame = CGRectMake(15, 15, 50, 25);
//btnBack.titleLabel.text = @"Back";
[btnBack setTitle:@"Back" forState:UIControlStateNormal];
[btnBack addTarget:self action:@selector(Back:) forControlEvents:UIControlEventTouchUpInside];
btnBack.userInteractionEnabled = YES;
UILabel *lblPlayerName = [[UILabel alloc]initWithFrame:CGRectMake(75, 20, 60, 20)];
lblPlayerName.backgroundColor = [UIColor redColor];
UILabel *lblHighScoreOfPlayer = [[UILabel alloc]initWithFrame:CGRectMake(215, 20, 80, 20)];
lblHighScoreOfPlayer.backgroundColor = [UIColor yellowColor];
lblPlayerName.text = [@"Name" uppercaseString];
lblHighScoreOfPlayer.text = [@"Scores" uppercaseString];
[viewHeader addSubview:btnBack];
[viewHeader addSubview:lblPlayerName];
[viewHeader addSubview:lblHighScoreOfPlayer];
return viewHeader;
【问题讨论】:
在你的 back 方法中设置一个断点,因为你的代码似乎是正确的。 它完成了,但是操作没有调用,因为按钮没有响应!!! 为什么写这行 btnBack.userInteractionEnabled = YES;默认属性已经是yes 尝试设置viewHeader.userInteractionEnabled = YES;
UIImageView 用于显示一个图像或一系列图像,而不是用于标签或按钮。您是否尝试过使用普通的 UIView?
【参考方案1】:
首先,您将图像视图添加为 uiview 的子视图以用于标题视图,而不是
UIView *viewHeader = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 320, 60)];
程序应按以下顺序进行。
step1.allocate UIView step2:添加imageView作为uiView的子视图 step3:将按钮添加为imageview的子视图 然后返回uiview
这是我测试过的工作代码。
- (UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
UIView *headerView = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.bounds.size.width, 30)] autorelease];
UIButton *btnBack = [UIButton buttonWithType:UIButtonTypeRoundedRect];
btnBack.frame = CGRectMake(15, 15, 50, 25);
[btnBack setTitle:@"Back" forState:UIControlStateNormal];
[btnBack addTarget:self action:@selector(Back:) forControlEvents:UIControlEventTouchUpInside];
btnBack.userInteractionEnabled = YES;
[headerView addSubview: btnBack];
return headerView;
【讨论】:
我添加了图像视图但没有结果.....按钮仍然没有响应!!! - (UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section UIView *headerView = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.bounds.size .width, 30)] 自动释放]; UIButton *btnBack = [UIButton buttonWithType:UIButtonTypeRoundedRect]; btnBack.frame = CGRectMake(15, 15, 50, 25); [btnBack setTitle:@"Back" forState:UIControlStateNormal]; [btnBack addTarget:self action:@selector(Back:) forControlEvents:UIControlEventTouchUpInside]; btnBack.userInteractionEnabled = YES; [headerView addSubview: btnBack];返回标题视图; 【参考方案2】:我不确定,但您可能应该为您的主要UIView
viewHeader.userInteractionEnabled = YES;
设置属性userInteractionEnabled
。
正如提到的@ott 尝试为viewHeader
分配UIView
而不是UIImageView
:
UIView *viewHeader = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 320, 60)];
试试看。希望对你有帮助
【讨论】:
感谢您的努力,但将 userInteractionEnabled 设置为 YES 也不起作用!!!以上是关于在 TableViewHeader 中以编程方式调用 IBAction的主要内容,如果未能解决你的问题,请参考以下文章
以编程方式获取 Android 手机型号,如何在 android 中以编程方式获取设备名称和型号?