2009-05-23 53 views
25

我创建一个按钮并将标题设置为“单击此处”。当我按下那个按钮时,我想获得那个按钮标题并记录下来。这是我的代码,我哪里错了?在事件处理程序中获取UIButton的标题

-(void)clicketbutton { 
    UIButton *mybutton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [mybutton setTitle:@"Click here" forState:UIControlStateNormal]; 
    [mybutton addTarget:self 
     action:@selector(displayvalue:)forControlEvents:UIControlEventTouchUpInside]; 
} 

-(void)displayvalue:(id)sender {  
    UIButton *resultebutton= [UIButton buttonWithType:UIButtonTypeCustom]; 

    resultebutton=sender;// pls clear here.. my question here , it it possible or not. if possible how ? 
    NSLog(@" The buttontitile is %@ ", [resultebutton.Title] // here also. 
} 

回答

72

你displayvalue:方法应该是这个样子:

-(void)displayvalue:(id)sender {  
    UIButton *resultButton = (UIButton *)sender; 
    NSLog(@" The button's title is %@.", resultButton.currentTitle); 
} 

(请查看Xcode中的文档,它会给你正确的答案)

+1

很好的欢呼声 – 2011-04-15 08:31:10

13
-(void)displayvalue:(id)sender 
{ 
    UIButton *resultebutton= (UIButton*)sender; 
    NSLog(@"The button title is %@ ", resultebutton.titleLabel.text); 
} 
1
-(void)clicketbutton { 
    UIButton *mybutton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [mybutton setTitle:@"Click here" forState:UIControlStateNormal]; 
    [mybutton addTarget:self 
     action:@selector(displayvalue:)forControlEvents:UIControlEventTouchUpInside]; 
} 
-(void)displayvalue:(id)sender {  

    NSLog(@"The title is %@ ", [mybutton titleForState:UIControlStateNormal]); 

} 
+1

我不认为这会在所有的工作。为了使它工作,mybutton需要是一个实例变量,但是你也需要在`-clicketbutton`中将该按钮分配给实例变量 - 目前该方法使用的是局部变量。换句话说,`mybutton`在你的两种方法中代表了不同的东西。 – 2015-03-11 23:49:04

3

我知道这是一个老问题,但这可能是解决这个问题的最好方法。

NSLog(@"The button title is: %@", [sender currentTitle]);   

编辑
我刚刚才知道这是根据事实,你已接收参数设置为UIButton*。而不是使用默认的id,创建一个UIButton对象并将(id)sender转换为该按钮。切出的中间人,只是设置函数签名

-(void)buttonPressed:(UIButton*)sender{ 
    NSLog(@"Button title: %@",sender.currentTitle); 
} 

这是有效的铸造性能参数