4

有没有办法通过 addTarget 调用传递参数,因为它调用另一个函数?

我也尝试过 sender 方法 - 但这似乎也坏了。在不创建全局变量的情况下传递参数的正确方法是什么?

@my_button = UIButton.buttonWithType(UIButtonTypeRoundedRect)
@my_button.frame = [[110,180],[100,37]]
@my_button.setTitle("Press Me", forState:UIControlStateNormal)
@my_button.setTitle("Impressive!", forState:UIControlStateHighlighted)

# events
newtext = "hello world"
@my_button.addTarget(self, action:'buttonIsPressed(newtext)', forControlEvents:UIControlEventTouchDown)
view.addSubview(@my_button)


def buttonIsPressed (passText)

   message = "Button was pressed down - " + passText.to_s
   NSLog(message)

end

更新:

好的,这是一个具有有效实例变量的方法。

@my_button = UIButton.buttonWithType(UIButtonTypeRoundedRect)
@my_button.frame = [[110,180],[100,37]]
@my_button.setTitle("Press Me", forState:UIControlStateNormal)
@my_button.setTitle("Impressive!", forState:UIControlStateHighlighted)

# events
@newtext = "hello world"
@my_button.addTarget(self, action:'buttonIsPressed', forControlEvents:UIControlEventTouchDown)
view.addSubview(@my_button)


def buttonIsPressed     
   message = "Button was pressed down - " + @newtext
   NSLog(message)
end
4

2 回答 2

7

将“参数”附加到 ruby​​motionUIButton调用的最简单方法是使用标签。

首先设置一个带有tag属性的按钮。此标记是您​​要传递给目标函数的参数。

@button = UIButton.buttonWithType(UIButtonTypeRoundedRect)
@button.setTitle "MyButton", forState:UIControlStateNormal
@button.frame =[[0,0],[100,50]]
@button.tag = 1
@button.addTarget(self, action: "buttonClicked:",  forControlEvents:UIControlEventTouchUpInside)

现在创建一个接受sender作为参数的方法:

def buttonClicked(sender)
    mytag = sender.tag

   #Do Magical Stuff Here
end

预警:据我所知,标签属性只接受整数值。您可以通过将逻辑放入目标函数中来解决此问题,如下所示:

def buttonClicked(sender)
    mytag = sender.tag

    if mytag == 1
      string = "Foo"

    else
      string = "Bar"
    end

end

最初,我尝试设置action: :buttonClicked有效但不允许使用该sender方法的操作。

于 2012-07-13T21:06:29.437 回答
0

是的,您通常在 Controller 类中创建实例变量,然后从任何方法调用它们的方法。

根据文档usingsetTitle是设置UIButton实例标题的一般方法。所以你做对了。

于 2012-06-20T11:06:22.190 回答