2015-06-10 2 views
0

Я много читал о Staked Overflow и смотрел видеоролики youtube о генерации кнопок с кодом, но я не могу понять, как иметь оператор if, основанный на кнопке. Это вложен внутри другого оператора, потому что, когда на один вопрос отвечают кнопки oringal yes или no, у меня возникает другой вопрос.Если инструкции для генерируемых кодом кнопок, Swift

у меня есть:

var btn = UIButton(frame: CGRectMake(50, 50, 150, 20)); 
btn.setTitleColor(UIColor.blackColor(), forState: UIControlState.Normal); 
btn.setTitle("My Button Text!!", forState:UIControlState.Normal); 
btn.addTarget(self, action: "buttonTapped:", forControlEvents: UIControlEvents.TouchUpInside); 
self.view.addSubview(btn); 

func buttonTapped(sender: UIButton!) { 
    println("Button Tapped!!!") 
} 

Но вместо того, чтобы печатать "Кнопка резьбовыми !!!" Я получаю ошибку «SIGABART». Как я могу использовать оператор if вместо функции one? Есть ли лучший способ решить эту функцию?

Полный код:

// 
// ViewController.swift 
// Living Vermont 
// 
// Created by Matthew Furtsch on 6/8/15. 
// Copyright (c) 2015 Matthew Furtsch. All rights reserved. 
// 

import UIKit 

class ViewController: UIViewController { 


    var label1: UILabel! 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 



     label1 = UILabel() 
     label1.text = "Is it a plant?" 
     label1.font = UIFont.systemFontOfSize(36) 
     label1.sizeToFit() 
     //Label location quardnets 
     label1.center = CGPoint(x: 100, y: 0) 
     view.addSubview(label1) 
     UIView.animateWithDuration(1.5, delay: 0.0, usingSpringWithDamping: 0.2, initialSpringVelocity: 0.0, options: nil, animations: { 
      self.label1.center = CGPoint(x: 100, y: 0 + 40) 
     }, completion: nil) 
    } 

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

    @IBAction func journal(sender: AnyObject) 
    { 

    } 
    @IBAction func noButton(sender: AnyObject) 
    { 
     label1.text = "no" 
     var btn = UIButton(frame: CGRectMake(50, 50, 150, 20)); 
     btn.setTitleColor(UIColor.blackColor(), forState: UIControlState.Normal); 
     btn.setTitle("My Button Text!!", forState:UIControlState.Normal); 
     btn.addTarget(self, action: "buttonTapped:", forControlEvents: UIControlEvents.TouchUpInside); 
     self.view.addSubview(btn); 

     func buttonTapped(sender: UIButton!) { 
      println("Button Tapped!!!") 
     } 
    } 
    @IBAction func yesButton(sender: AnyObject) 
    { 

     label1.text = "yes" 
     } 
} 
+0

Если вы получаете SIGABRT, какое сообщение об ошибке связано с объяснением причины прерывания? Предоставьте сообщение и трассировку стека. – kbgn

+0

Код, который вы предоставили, полностью подходит для меня. Возможно, это ошибка в Xcode ... попробуйте перезапустить ее. – LinusGeffarth

ответ

0

Я думаю, что ваша функция buttonTapped вложен внутрь другого метода, как viewDidLoad. Это должен быть метод верхнего уровня вашего класса контроллера вида. Переместите метод buttonTapped так, чтобы он находился внутри вашего класса, но не внутри любых методов внутри вашего класса.

Вы должны отредактировать свой вопрос и включить все сообщение об аварии, которое вы получаете, а также трассировку стека. Это может помочь нам рассказать, что происходит не так.

Смежные вопросы