【问题标题】:uibutton events with @selector [duplicate]带有@selector的uibutton事件[重复]
【发布时间】:2009-06-16 04:54:30
【问题描述】:

可能重复:
Uibutton events

-(void)myButtonclick {
    NSString *data=[[NSString alloc]initWithString:@"YES U PRESSED BUTTON"];
    UIButton *refreshbutton=[UIButton buttonWithType:UIButtonTypeCustom];

    [refreshbutton setFrame:CGRectMake(15.0f, 330.0f, 150.0f, 32.0f)];
    [refreshbutton setCenter:CGPointMake(80.0f,340)];   
    [refreshbutton setBackgroundImage: normalImage forState: UIControlStateNormal];
    [refreshbutton setBackgroundImage: downImage forState: UIControlStateHighlighted];
    [refreshbutton setBackgroundImage: selectedImage forState: UIControlStateSelected];
    [refreshbutton setTitle:@"Refresh"  forState:UIControlStateNormal];
    [refreshbutton addTarget:self action:@selector(showMessage:) forControlEvents:UIControlEventTouchUpInside];
}

-(id)showMessage:(id)sender{
    // Here I want to get the value of "data" which is defined the method 
    // "myButtonclick" in the first line. how it is possible..?
}

在方法“myButtonclick”的上述代码中,我设置了一个 NSString 变量名称为“data”,当我按下该按钮时,我想在方法“showMessage”中获取(打印)它的值(YES U PRESSED BUTTON) .

我知道这是使用 @selector 变量完成的.. 但我不知道它是如何完成的

【问题讨论】:

    标签: iphone objective-c cocoa cocoa-touch uibutton


    【解决方案1】:
    1. 字符串对象和data objects 是两个不同的东西。不要将字符串变量命名为“数据”——你会让自己和其他任何阅读代码的人感到困惑,而你的程序也会出现错误。
    2. @selector 不是变量。它是文字表达式的一部分。

    要么定义在showMessage: 而不是myButtonClick 中保存字符串的变量,要么将其设为实例变量并创建字符串并在init 中分配它。

    只要你释放dealloc 中的字符串,使它成为实例变量也将修复你的泄漏(你alloc 字符串但永远不会释放它)。请参阅the Memory Management entry in Cocoa Core Competencies 了解有关您当前代码错误原因的更多详细信息。

    我也对myButtonClick 应该做什么感到困惑。它当然不会点击按钮——它所做的只是创建它(您会发现在 IB 中更容易做到这一点)。另外,您甚至没有将按钮放入视图中;您创建并设置它,然后方法结束。

    【讨论】:

      猜你喜欢
      • 2013-03-02
      • 1970-01-01
      • 1970-01-01
      • 2018-02-14
      • 2012-05-27
      • 2012-06-09
      • 1970-01-01
      • 2014-11-25
      • 1970-01-01
      相关资源
      最近更新 更多