ios tableView 自定义cell上的按钮点击事件不好用

最近,做项目的时候,需要在自定的table cell上添加按钮,结果发现设置的按钮点击事件不好用,之前的项目也做过类似功能,但是因为那个时候是刚接触ios,所有采用的是添加代理的方式。上网查了资料,发现原因的是因为ios 7 之后在cell中添加的按钮,实际上是添加在cell的scrollView上, 由于IOS7中添加了滑动后出现编辑按钮的操作,所以使用scrollView来处理UITableViewCellScrollView有对触摸的相应处理,导致按钮的点击效果被屏蔽了,但是点击事件还是在的。使用网上介绍的方法: ---(不好用,也许是我的方法不对)

1.设置tableView.delaysContentTouches = NO;

2.同时在(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath代理方法中对scrollview把延迟触摸设置为NO即可。

真正解决问题的方法是:在- (UITableViewCell *)tableView:(UITableView *)atableView cellForRowAtIndexPath:(NSIndexPath *)indexPath中往cell添加按钮。

相关代码:

- (UITableViewCell *)tableView:(UITableView *)atableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSInteger row = [indexPath row];
    static NSString *Contentidentifier = @"CommonOrderCell";
    LotteryOrder *order = [dataList objectAtIndex:row];
    UINib *nib = [UINib nibWithNibName:Contentidentifier bundle:nil];
    [atableView registerNib:nib forCellReuseIdentifier:Contentidentifier];
    CommonOrderCell *cell=[atableView dequeueReusableCellWithIdentifier:Contentidentifier];
    //cell.lblHandleTime.text = [NSString stringWithFormat:@"%@", order.handleOrderTime];
    cell.lblLotteryType.text = [NSString stringWithFormat:@"%@", order.lotteryTypeDesc];
    cell.lblMoney.text = [NSString stringWithFormat:@"%1g元", order.money];
    cell.lblProjectNum.text = [NSString stringWithFormat:@"%@", order.projectNumber];
    UIButton *btnRobOrder = [UIButton buttonWithType:UIButtonTypeCustom];
    [btnRobOrder setFrame:CGRectMake(226, 90, 60, 30)];
    [btnRobOrder setBackgroundColor:[UIColor colorWithRed:(21.0/255.0) green:(136.0/255.0) blue:(238.0/255.0) alpha:1]];
    btnRobOrder.layer.cornerRadius = 5.0;
    [btnRobOrder.titleLabel setFont:[UIFont systemFontOfSize:13.0]];
    [btnRobOrder setTitle:@"抢约" forState:UIControlStateNormal];
    [btnRobOrder setTag:row];
    [btnRobOrder addTarget:self action:@selector(robOrderBtnClick:) forControlEvents:UIControlEventTouchUpInside];
    [cell.contentView addSubview:btnRobOrder];
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
    return cell;
}

点击事件相关代码:(通过tag去取到相映的数据)

-(void) robOrderBtnClick:(id) sender
{
    UIButton *button = (UIButton *)sender;
    NSInteger index = button.tag-1;
    NSString *orderId = [[dataList objectAtIndex:index] orderId];
}

注:

IOS6的UITableViewCell 子视图(subviews)的容器是UITableViewCellContentView

IOS7的UITableViewCell 子视图(subviews)的容器是UITableViewCellScrollView


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: QML中的TableView是一种常用的用于显示和编辑表格数据的控件,它允许我们使用TableModel为其提供数据。而自定义委托是为了满足不同的数据显示需求而创建的一种方式。 使用QML中的TableView默认情况下,每个单元格都会使用内置的委托来显示数据,但有时我们可能需要根据特定需求对数据进行自定义显示。这时,我们可以通过自定义委托来实现。 首先,我们需要创建一个自定义的Delegate组件,用于定义我们想要的数据显示方式。在Delegate中可以定义各种需要显示的元素,如文本框、按钮等。 接下来,我们需要在TableView的columns中指定使用自定义的委托。可以通过设置column的delegate属性为我们创建的自定义Delegate来实现。 自定义Delegate的使用方法可以参考以下示例代码: ``` // 创建自定义的Delegate组件 Item { id: myDelegate // 自定义委托中的元素(例如,一个文本框) Text { text: styleData.value // 根据数据显示元素内容 } } // 在TableView中使用自定义委托 TableView { id: myTableView // ... // 定义列,并使用自定义委托 TableViewColumn { role: "column1" // 数据模型中的角色名 title: "列1" // 列标题 delegate: myDelegate // 使用自定义的委托 } // ... } ``` 上述代码中,首先创建了一个自定义Delegate组件(myDelegate),并在其中定义了一个文本框用于显示数据。然后,在TableView的columns中指定了一个列,设置其delegate属性为myDelegate。 使用自定义Delegate后,TableView会使用我们定义的委托来显示相应的单元格数据。 这就是通过QML中的TableView定义委托的基本方法。使用自定义委托,我们可以根据具体需求,灵活地定制数据的显示方式,以满足不同的界面展示要求。 ### 回答2: QML TableView是用于展示表格数据的视图元素,通过自定义委托,可以对单元格进行个性化的展示和交互操作。 要自定义委托,首先需要定义一个自定义的Item,可以继承自Item或者其他适合的控件。在自定义Item中,可以添加自定义的布局、样式和交互行为,以及展示需要的数据。 在TableView的每个单元格中,可以使用delegate属性绑定自定义的Item,将其设置为单元格的委托。这样,每个单元格就会使用自定义的Item来展示和交互。 在自定义Item中,可以使用数据模型中的role来绑定展示的数据,通过role的值来获取对应的数据,并进行展示和处理。可以根据具体需求,对数据进行格式化、计算等操作,并将结果展示在自定义的Item中。 另外,还可以在自定义Item的相应事件中添加交互逻辑。例如,可以在鼠标点事件或者键盘事件中,获取当前点的单元格位置、获取选中的数据等,根据业务需求来处理。 自定义委托的好处是可以灵活地定制每个单元格的展示和交互方式,以适应不同的场景和需求。通过设置特定的样式和交互逻辑,可以让TableView的数据展示更加美观和人性化,提升用户体验。 总之,通过在QML TableView中使用自定义委托,可以个性化定制单元格的展示和交互方式,使得表格数据在界面上更加灵活和美观。 ### 回答3: QML中的TableView是用于显示二维表格数据的控件,其默认的委托是用于显示数据的,默认情况下,每个单元格显示为一个默认的Text控件。 如果我们想要自定义委托,可以通过设置TableView的delegate属性来实现。自定义委托可以让我们对单元格的显示方式进行个性化设置,例如改变字体、颜色、布局等。 在自定义委托时,我们可以使用DelegateModel来定义数据模型,然后在TableView的delegate属性中指定该模型。DelegateModel是用于定义每个单元格的数据和样式的,可以通过设置其属性来实现个性化定制。 在自定义委托时,我们可以定义一个自定义的Component来指定单元格中的内容和样式,然后将该Component赋值给DelegateModel的delegate属性。在该Component中,可以通过子项来访问单元格中的数据,并通过设置其属性来控制显示方式。 除了自定义委托,我们还可以通过设置TableView的itemDelegate属性来实现单元格的个性化显示。itemDelegate是一个ItemDelegate类型的对象,可以在其中定义单元格的显示方式,并将其赋值给TableView的itemDelegate属性。 总之,QML的TableView控件支持自定义委托,可以通过设置delegate或itemDelegate属性来实现个性化的单元格显示。我们可以使用DelegateModel来定义数据模型,并在其中设置单元格的内容和样式。通过自定义Component或ItemDelegate,我们可以对单元格的显示方式进行定制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值