Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 我想在点击动态创建的不同按钮时执行不同的操作_Iphone_Objective C - Fatal编程技术网

Iphone 我想在点击动态创建的不同按钮时执行不同的操作

Iphone 我想在点击动态创建的不同按钮时执行不同的操作,iphone,objective-c,Iphone,Objective C,按钮是动态创建的,图像是通过解析的URL提供给它们的,因此我创建了它们,并仅在viewDidLoad中发布它们。所以,当我点击按钮时,我想在点击不同的按钮时执行不同的任务。但是我做不到。 我试着给它们设置标签,但同样没有用,因为它给了我EXC_BD_访问权。。。。任何帮助都将不胜感激……:) 代码:- @class-AppDelegate\u iPhone、Litofinter、ParsingViewController; @界面FirstViewController:UIViewControl

按钮是动态创建的,图像是通过解析的URL提供给它们的,因此我创建了它们,并仅在viewDidLoad中发布它们。所以,当我点击按钮时,我想在点击不同的按钮时执行不同的任务。但是我做不到。 我试着给它们设置标签,但同样没有用,因为它给了我EXC_BD_访问权。。。。任何帮助都将不胜感激……:) 代码:-

@class-AppDelegate\u iPhone、Litofinter、ParsingViewController;
@界面FirstViewController:UIViewController{
NSMutableArray*数组;
NSString*标识字符串;
AppDelegate_iPhone*AppDelegate;
ParsingViewController*obj;
UIScrollView*滚动视图;
NSMUTABLEARRY*idArray;
NSMutableArray*currentpdfur;
}
@属性(非原子,保留)UIScrollView*scrollView;
//-(void)onTapImage:(UITapgestureRecognitor*)识别器;
-(void)onTapButton:(id)发送方;
@结束
#导入“FirstViewController.h”
#导入“AppDelegate_iPhone.h”
#导入“Litofinter.h”
#导入“ParsingViewController.h”
#导入“my手势.h”
@FirstViewController的实现
@综合滚动视图;
-(id)init{
if(self==[super init]){
obj=[[ParsingViewController alloc]init];
array=[[NSArray alloc]initWithArray:obj.logomatableArray];
}
回归自我;
}
//实现viewDidLoad以在加载视图(通常从nib)后执行附加设置。
-(无效)viewDidLoad{
[超级视图下载];
int x=20,y=10;
INTA=50,b=105;
appDelegate=(appDelegate_iPhone*)[[UIApplication sharedApplication]delegate];
scrollView=[[UIScrollView alloc]initWithFrame:CGRectMake(0500460)];
scrollView.contentSize=CGSizeMake(320800);
scrollView.showsVerticalScrollIndicator=是;
for(appDelegate.logoArray中的Litofinter*lito){
NSString*urlString=[lito.cLogo stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];
NSURL*imageURL=[NSURL URLWithString:urlString];
NSData*imageData=[NSData dataWithContentsOfURL:imageURL];
UIImage*image=[UIImage imageWithData:imageData];
/*              
UIImageView*imgView=[[UIImageView alloc]initWithImage:image];
[imgView设置帧:CGRectMake(x,y,140,90)];
imgView.userInteractionEnabled=是;
imgView.multipleTouchEnabled=是;
imgView.backgroundColor=[UIColor blueColor];
//imgView.tag=lito.cId;
//NSLog(@“标记Id=%@”,imgView.Tag);
NSLog(@“标记Id=%@”,lito.cId);
UITapGestureRecognizer*tgr=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(onTapImage:)];
tgr.delegate=self;
[imgView addgestureRecognitor:tgr];
[滚动视图添加子视图:imgView];
tgr.view.tag=(int)[NSString stringWithFormat:@“%@”,lito.cId];
NSLog(@“tagid=%@”,tgr.view.Tag);
//NSLog(@“标记Id=%@”,lito.cId);
*/      
UIButton*imageButton=[UIButton按钮类型:UIButtonTypeCustom];
[imageButton设置框:CGRectMake(x,y,140,90)];
[图像按钮设置图像:图像状态:uicontrol状态正常];
[imageButton addTarget:自我操作:@选择器(onTapButton:)用于控制事件:UIControlEventTouchUpInside];
[imageButton设置标签:lito.cId];
[滚动视图添加子视图:图像按钮];
UILabel*cName=[[UILabel alloc]initWithFrame:CGRectMake(a,b,130,20)];
cName.text=lito.cName;
[滚动视图添加子视图:cName];
//在这里执行其余操作时,不要忘记释放UIImageView
x=x+150;
a=a+140;
如果(x>300)
{
y=y+140;
x=20;
b=b+150;
a=50;
}
//[tgr释放];
//[imgView发布];
}
[self.view addSubview:scrollView];
}
-(无效)onTapButton:(id)发件人
{
NSLog(@“标记Id=%@”,self.view.Tag);
UIAlertView*alert=[[UIAlertView alloc]initWithTitle:@“来自mAc的消息”消息:@“标记Id”委托:自取消按钮:@“取消”其他按钮:@“确定”,无];
[警报显示];
}

设置目标时,您可以根据按钮更改选择器

[imageButton addTarget:self action:@selector(onTapButton:) forControlEvents:UIControlEventTouchUpInside];
如果你想使用标签,它也可以工作,你的坏访问来自

NSLog(@"Tag Id = %@",self.view.tag);
假设标记是一个NSObject(响应描述选择器),而实际上它是一个数值。将其更改为:

NSLog(@"Tag Id = %i",self.view.tag);
另外,使用时要小心

NSData * imageData = [NSData dataWithContentsOfURL:imageURL];

由于这是一个同步API,如果它是本地文件(尽管使用[UIImage ImageName:]缓存图像数据更经济),那么它是一个同步API,如果它是网络文件,那么它就非常糟糕(因为它会阻塞线程,直到请求结束,这可能需要很长时间)。

您可以在设置目标时根据按钮更改选择器

[imageButton addTarget:self action:@selector(onTapButton:) forControlEvents:UIControlEventTouchUpInside];
如果你想使用标签,它也可以工作,你的坏访问来自

NSLog(@"Tag Id = %@",self.view.tag);
假设标记是一个NSObject(响应描述选择器),而实际上它是一个数值。将其更改为:

NSLog(@"Tag Id = %i",self.view.tag);
另外,使用时要小心

NSData * imageData = [NSData dataWithContentsOfURL:imageURL];

由于这是一个同步API,如果它是本地文件(虽然使用[UIImage ImageName:]缓存图像数据更经济),那么它是一个同步API,如果它是网络文件(因为它会阻塞线程直到请求结束,这可能需要很长时间)。

感谢jbat100。。。。但是如果我写NSLog(@“tagid=%i”,self.view.Tag);然后,我的ID也没有出现,我已经设置好了。您应该从发送者(将是按钮)NSLog(@“tag ID=%i”,[(UIButton*)发送者标记])获取标记;我设置的ID和我得到的ID与我设置的ID不同,我从解析的XML中得到的ID和我得到的ID是8-9位的。。。。我还想问一下…您的xml id有多长?NSInteger的最大值是NSIntegerMax,定义为LONG_max(2147483647),您的id是否大于该值?我的id是2,20,21,22,但它们即将到来