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