使用UIButton文本作为文本输入 - Swift

时间:2015-06-19 11:23:14

标签: ios swift uibutton

你好我有一个如下的profilelbl变量,它是一个uibutton。我希望按钮的文本是我的数据库(解析)中的输入。但我无法弄明白。我尝试了很多东西,但仍然收到错误:

  @IBOutlet weak var profileLbl: UIButton!

  var notification = PFObject(className: "notifications")

        notification["actionReceiverName"] = profilelbl.text /*not working*/

     /*    also tried

   notification["actionReceiverName"] = sender.profilelbl.text

   notification["actionReceiverName"] = profilelbl.title    */

2 个答案:

答案 0 :(得分:2)

你可以轻松地做到这一点

if let button = profilelbl as? UIButton {
    if let title = button.titleForState(.Normal) {
        println(title)
        notification["actionReceiverName"] = title
    }
}

答案 1 :(得分:0)

使用UI对象来保存/加载数据是一个非常糟糕的主意。以编程方式使用用户可见的字符串是一个更糟糕的想法。 @ÖzgürErsil回答了你提出的问题,但对你的问题更好的答案是“不要那样做。永远。”

以下是您的方法失败的两个示例:

  1. 如果6个月后您想要更改用户界面并重命名按钮, 你不会记得在代码和你的代码中使用了按钮标题 代码会破裂。为此,您必须将数据库更改为 使用不同的字符串值。

  2. 如果您决定将应用本地化为外国用户 语言,按钮标题将以当地语言出现,并且 你的代码会破裂。没有干净的方法来解决这个问题, 因为每种本地语言都会使用不同版本的 按钮标题。

  3. 最好在按钮上添加唯一标记号,然后使用标记查找文本字符串并将这些字符串传递给数据库。

    假设您有从100开始的按钮标记。

    您可以使用以下代码:

    let buttonStrings = ["button1", "button2", "button3"]
    let baseButtonTag = 100;
    
    @IBAction func handleButton(sender: UIButton)
    {
      let tag = sender.tag
      if tag >= baseButtonTag && tag < baseButtonTag + buttonStrings.count
      {
        let index = sender.tag - baseButtonTag
        let buttonString = buttonStrings[index];
        //Now use buttonString with your database as desired.
      }
    }