在 iOS 上以编程方式向按钮添加操作

Posted

技术标签:

【中文标题】在 iOS 上以编程方式向按钮添加操作【英文标题】:Adding actions to a button programmatically on iOS 【发布时间】:2011-04-28 16:36:32 【问题描述】:

我正在尝试向我以编程方式创建的按钮添加一个操作:

        [btn    addTarget:self
            action:@selector(indexAction)
     forControlEvents:UIControlEventTouchUpInside];

这很好用。但是,我现在想将一个变量 (int k) 传递给 indexAction 方法。我无法让它工作:

        [btn    addTarget:self
            action:@selector([self indexAction:k])
     forControlEvents:UIControlEventTouchUpInside];

我确定我做错了什么。这是上面代码的上下文:

  -(void) initIndexButtons 

    float buttonPadding = -8;
    float buttonWidth = 23;
    float buttonHeight = 80;
    CGRect frame = CGRectMake(0,0,0,0);
    for (int k=0;k<5;k++)
    
        UIButton* btn = [[UIButton alloc] initWithFrame:frame];;        btn.tag = k;
        btn.frame = CGRectMake(0, k*(buttonPadding+buttonHeight), buttonWidth, buttonHeight);

        UIImage *newImage = [UIImage imageNamed:@"index.png"];
        [btn setBackgroundImage:newImage forState:UIControlStateNormal];

        [btn    addTarget:self
                action:@selector(self indexAction:k)
         forControlEvents:UIControlEventTouchUpInside];
    


-(void)indexAction:(int *)buttonTag

    NSLog(@"buttonTag: %i", buttonTag);


编辑:

我将代码更改为:

// ...
[btn    addTarget:self
                action:@selector(indexAction:)
         forControlEvents:UIControlEventTouchUpInside];

        //[self indexAction:k];

        [indexView addSubview:btn];
        [indexView sendSubviewToBack:btn];
    


-(void)indexAction:(id)sender

    NSInteger *tid = ((UIControl *) sender).tag;
    NSLog(@"buttonTag: %i", tid);

但现在我收到警告消息“初始化从整数生成指针,而不对行 NSInteger *tid = ((UIControl *) sender).tag; 进行强制转换


编辑:

这是正确的代码行:

NSInteger tid = ((UIControl*)sender).tag;

【问题讨论】:

你想达到什么目的?如果您需要找出点击了哪个按钮,那么您已经将 tag 属性设置为“k”。 @onnoweb:实际上,是的,我需要找出点击了哪个按钮。所以我以为我为每个按钮分配了一个“自定义”操作,不是吗?我如何检查标签属性?我现在的有限目标是让 indexAction 方法打印按下了哪个按钮。感谢您的帮助! tag 属性是一个整数,但您分配给它的变量 (tid) 被声明为指向整数的指针。删除*,它应该可以工作。 【参考方案1】:

按钮调用的方法通常只有一个参数:

(id)sender

看看问题-how to pass a variable to a UIButton action

【讨论】:

我看过这个,但现在我收到了一个警告(见上文 - 我已经更新了我的问题)。【参考方案2】:

tagNSInteger 不是 NSInteger*

改成

NSInteger tid = ((UIControl*)sender).tag;

【讨论】:

【参考方案3】:

设置方法是:

-(void)indexAction:(id)sender

NSLog(@"Tag=%@"[(UIButton*)sender tag]);

和电话:

    [btn    addTarget:self
            action:@selector(self indexAction:)
     forControlEvents:UIControlEventTouchUpInside];

不太确定我的选角,还没有测试过,但我认为它应该可以工作! 祝你好运。

【讨论】:

以上是关于在 iOS 上以编程方式向按钮添加操作的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 7 上以编程方式安装 .mobileconfig 文件

UITableView以编程方式调用滑动操作

如何在 iOS 5 上以编程方式规范化 PCM 音频样本?

UITableView 以编程方式调用滑动操作

在 iPad 上以编程方式添加子视图,硬编码

使用选择器操作向 UIView 添加多个 UIButton