当我触摸按钮时,如何只做一件事?

时间:2015-07-28 06:59:01

标签: ios swift

我只用几句话就无法形容它。

@IBOutlet weak var ClubIntro: UILabel!
@IBOutlet weak var DetailButton: UIButton!
override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}


@IBAction func TouchDown(sender: AnyObject) {
    if DetailButton.titleLabel?.text == "收回"{
        ClubIntro.numberOfLines = 5
        DetailButton.titleLabel?.text = "展开"
    }
    else {
        ClubIntro.numberOfLines = 0
        DetailButton.titleLabel?.text = "收回"
    }
}

这是我的代码。我想很容易知道我想做什么。

但是这段代码并没有给出我想要的结果。

按钮的文字是"收回"默认值和标签的数字标记为0

所以,当我触摸按钮时。它将采用第一个IF句子并将按钮的标题文本更改为"展开"标签的编号为5。

但由于触摸的持续时间太长,然后在持续时间内,将再次调用TouchDown函数,然后将值更改回来。

我曾经考虑过中断句,但它只能在循环中使用。

那么,当我完成第一个IF句子时,如何退出TouchDown函数?

3 个答案:

答案 0 :(得分:2)

第一个问题: - 你做错了!你应该抓住这个事件: -

UIControlEventTouchUpInside 

手指在控件范围内的控件中的触摸事件。

第二个问题: -

我发现它已经很晚了,它之前已经回答: -

您没有正确设置按钮标题。

这应该是这样的: - DetailButton.setTitle("Button Title", forState: UIControlState.Normal)

答案 1 :(得分:1)

创建UIControlEventTouchUpInside

@IBAction func TouchUpInside(sender: AnyObject) {

 let button = sender as UIButton
 if button.titleLabel?.text == "收回"{
     ClubIntro.numberOfLines = 5
     sender.setTitle("展开", forState: UIControlState.Normal) 
 }
 else {
     ClubIntro.numberOfLines = 0
     sender.setTitle("收回", forState: UIControlState.Normal)
 }}

答案 2 :(得分:0)

首先,您应该将UIControlEventTouchUpInside设置为控制事件标志,以便该按钮将检测应触发该方法的操作类型。此外,我们不确定这是否是您的预期行为,您应该始终查阅文档以找到您的愿望恒定标志。

在代码中,你可以在代码中设置这样的东西,或者从xib文件中按住ctrl + drag然后选择TouchUpInside

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];

因为我能读中文,我觉得你的逻辑有问题吗?您应该明白,将0分配给numberOfLines实际上并不是将它作为0行。这意味着它将根据UILabel的实际内容自动展开。