你好我有一个如下的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 */
答案 0 :(得分:2)
你可以轻松地做到这一点
if let button = profilelbl as? UIButton {
if let title = button.titleForState(.Normal) {
println(title)
notification["actionReceiverName"] = title
}
}
答案 1 :(得分:0)
使用UI对象来保存/加载数据是一个非常糟糕的主意。以编程方式使用用户可见的字符串是一个更糟糕的想法。 @ÖzgürErsil回答了你提出的问题,但对你的问题更好的答案是“不要那样做。永远。”
以下是您的方法失败的两个示例:
如果6个月后您想要更改用户界面并重命名按钮, 你不会记得在代码和你的代码中使用了按钮标题 代码会破裂。为此,您必须将数据库更改为 使用不同的字符串值。
如果您决定将应用本地化为外国用户 语言,按钮标题将以当地语言出现,并且 你的代码会破裂。没有干净的方法来解决这个问题, 因为每种本地语言都会使用不同版本的 按钮标题。
最好在按钮上添加唯一标记号,然后使用标记查找文本字符串并将这些字符串传递给数据库。
假设您有从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.
}
}