将多个参数乐趣分配给动态按钮时应用程序崩溃

Posted

技术标签:

【中文标题】将多个参数乐趣分配给动态按钮时应用程序崩溃【英文标题】:application Crash when assign multiple argu fun to dynamic button 【发布时间】:2010-11-23 09:04:27 【问题描述】:
for (int i=0;i<[tableDataSource count];i++) 

        NSDictionary *dict = [tableDataSource objectAtIndex:i];
        rowText = [dict objectForKey:@"title"];

        UIButton *btn = [UIButton buttonWithType: UIButtonTypeRoundedRect];
        [btn setTitle:rowText forState:UIControlStateNormal];
        [btn addTarget:self action:@selector(myActionbtnText:) forControlEvents:UIControlEventTouchUpInside];
        btn.frame = CGRectMake(60,  40+2*(40*i), 200, 40);
        btn.alpha = 0.81;

        [self.view addSubview:btn];

我在将动作分配给动态按钮时遇到错误我的动作如下所示,当按钮事件发生时如何传递对象/参数。

-(void) myAction:(NSString *)btnText; 

    NSLog(@"%@ Button Clicked",btnText);

【问题讨论】:

【参考方案1】:

试试这个:

for (int i=0;i<[tableDataSource count];i++)

    UIButton *btn = [UIButton buttonWithType: UIButtonTypeRoundedRect];
    [btn setTitle:rowText forState:UIControlStateNormal];
    [btn addTarget:self action:@selector(myActionbtnText:) forControlEvents:UIControlEventTouchUpInside];
    btn.tag = i;
    btn.frame = CGRectMake(60,  40+2*(40*i), 200, 40);
    btn.alpha = 0.81;

    [self.view addSubview:btn];


-(void) myAction:(UIButton*)sender 
    NSDictionnary *dict = [tableDataSource objectAtIndex:sender.tag];
    NSString* rowText = (NSString*)[dict objectForKey:@"title"];
    NSLog(@"%@ Button Clicked",rowText);

【讨论】:

谢谢 MathieuF 当按钮 r 在 NO 中增加时它不会滚动。即使我把它放在 ScrollView 上。【参考方案2】:

您的解决方案存在一些问题。

    UIButton 不响应addTarget:action:withObject:forControlEvents:,而是响应addTarget:action:forControlEvents。这就是您的应用崩溃的原因。 选择器应该是@selector(myAction:)。不应包含该参数。 我很确定它无论如何都不会工作,因为当按下按钮时rowText 将超出范围并且不再可用。这就是为什么您应该使用@MathieuF 解决方案的原因(只要确保正确指定选择器)。

【讨论】:

谢谢罗伯特,但如果我必须将参数/参数传递给该函数,我能做些什么。当按钮 r 在 NO 增加时,它不会滚动。即使我把它放在 ScrollView 上。

以上是关于将多个参数乐趣分配给动态按钮时应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章

如何将相同的事件侦听器分配给 Vue.js 中动态创建的按钮并将对象的值作为参数传递给它?

为啥我不能将具有用户定义参数的方法分配给 c# 中的按钮?

将 HTML 中的变量动态分配给 AS3 变量

具有多个 UIButton 的多个自定义单元格崩溃

将Sub分配给动态定义的CommandButton

动态地将id分配给在kotlin中单击按钮时创建的edittext [重复]