UIButton addTarget 不适用于 iOS7,但适用于 IOS6

Posted

技术标签:

【中文标题】UIButton addTarget 不适用于 iOS7,但适用于 IOS6【英文标题】:UIButton addTarget doesn't work with iOS7,but works in IOS6 【发布时间】:2013-12-02 02:28:01 【问题描述】:

显然,这段代码在 ios 6 中可以工作。顺便说一下,它在 iOS 7 中有问题。

我将 UIButton 添加到 UIPickerView 的每一行:

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view

    UIButton *btnRow=[UIButton buttonWithType:UIButtonTypeSystem];
    [btnRow addTarget:self action:@selector(touch:) forControlEvents:UIControlEventTouchUpInside];
    btnRow.frame=CGRectMake(0, 0, 320, 30);
    int tag= selfTextField.tag/10000 - 1;
    [btnRow setTitle:[[pickerArray objectAtIndex:tag] objectAtIndex:row] forState:UIControlStateNormal];

    return btnRow;

【问题讨论】:

编辑:重复***.com/questions/19266966/… 这是一个更好的副本,虽然没有真正的答案:***.com/questions/19245744/…。为什么不使用表格视图呢? 你的 addSubview:btnRow 方法在哪里? 一些 UITextFields 应该由用户选择,包括一些日期。所以,我使用 UIDatePicker 和 UIPickerView。 【参考方案1】:

您不能在选择器视图行上放置按钮。所以我在 UIPickerView 上方添加了一个工具栏,并在其上添加了一个栏按钮项。我使用行号通过选择器执行所需的功能

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component

     ....
     //get the row number & Perform desired functionality
     ....

您将获得行号并使用它来执行所需的功能。

【讨论】:

但它在IOS6中可以工作。我只是想知道是什么导致了问题。 所需的功能对所选行进行签名并在 UITextFied 中显示所选行的内容。所以,delegate 功能并不能解决我的问题。另外,如何在 UIPickerView 上方添加工具栏并保持 UIPickerView 正常工作。在每一行添加工具栏?

以上是关于UIButton addTarget 不适用于 iOS7,但适用于 IOS6的主要内容,如果未能解决你的问题,请参考以下文章

自定义 UIView:未调用 UIButton addTarget

UIButton.addTarget 无法正常工作。似乎是一个时间问题?

UIButton setImage 不适用于自定义注释视图

UIButton 上的 addTarget 不起作用

UIButton 类参考文档上的 addTarget 方法

UIButton 的 Swift addTarget 在 UIView 中不起作用