iphone中选择器的问题?

时间:2010-03-29 07:25:40

标签: iphone

我有一个应用程序,我正在生成uibuttons动态想要使用相同的@selector ...现在因为生成事件,我想检查值并​​将其传递给thtroughthat选择器如何实现此代码? 任何人都可以告诉我一个教程排序按钮是动态生成的,并检查特定按钮点击是否被描述? Plz帮助...

2 个答案:

答案 0 :(得分:2)

不确定“动态”调用什么...始终动态创建Objective-c对象。也许你的意思是你想用相同的代码创建一系列非常相似的按钮?是的,这是一项非常普遍的任务。例如在app这样的计算器中,我们需要十个带数字的按钮,为什么不用单个代码块创建呢?所以:

- (void)makeButtons{
    UIButton * aButton;
    for(int i = 0; i < 10; i++){
        aButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        aButton.frame = CGRectMake(0, i*45, 60, 40);
        [aButton addTarget:self action:@selector(digitClick:) forControlEvents:UIControlEventTouchUpInside];
        [aButton setTitle:[NSString stringWithFormat:@"%d",i] forState:UIControlStateNormal];
        aButton.tag = i;
        [self.view addSubview:aButton];
    }
}

- (void)digitClick:(id)sender{
    UIButton * aButton =(UIButton *)sender;
    NSLog(@"cliced button with title %d",aButton.tag); 
}

我们使用标记属性来查找点击按钮的索引,它经常被使用,但还有其他一些方法。例如,在数组中存储创建的按钮,然后检查sender是否等于数组元素之一: ... if([allButtons objectAtIndex:i] == sender) ...

如果你想传递一些数据,例如每个按钮的字符串,只需用这些对象创建数组,然后使用tag作为索引来访问它。

答案 1 :(得分:0)

尝试:

[self.button1 addTarget:self action:@selector(buttonTouchDown:) forControlEvents:UIControlEventTouchDown];
[self.button2 addTarget:self action:@selector(buttonTouchDown:) forControlEvents:UIControlEventTouchDown];

- (IBAction)buttonTouchDown:(id)sender
{
  if (sender == self.button1) NSLog(@"Button-1");
  if (sender == self.button2) NSLog(@"Button-2");
}