2016-09-29 15 views
0
func createButton() { 
    let b = UIButton() 
    // Some code to modify image of button 
    b.addTarget(self, action: "fade", forControlEvents: .TouchDown) 
    self.view.addSubview(b) 
    // Some code to add constraints  
} 

func fade() { 
    UIView.animeWithDuration(5, animations: { 
     self.b.alpha = 0 // Error (ViewController has no member 'b') 
} 

createButton()ViewControllerとは別の見解があるため、このエラーが発生しますか?私はボタンを通過しようとしたので、sender.view.b.alpha = 0を使用していますが、UIButtonにはviewがありません。関数内にボタンが作成されている場合、追加する場所はどこですか?

ありがとうございます。

+0

ええ、それは私の考えです。あなたは正しいボタンを指していますか?それを関数に渡すことはできませんか? – fossdeep

+0

私は以前ボタンに合格したときに間違った参照を使用していたことに気付きました。私は 'func fade(送信者:UIButton)'と 'sender.alpha = 0'を使っていました。しかし、別のエラーにつながります。しかし、私がこれを正しく行っている限り、問題のこの部分は問題ありませんか? – fossdeep

答えて

2

ボタンを正しいスコープで宣言する必要があります。現在は、createButtonの関数スコープでのみ宣言しています。しかし、それをあなたのクラスのインスタンス変数にすることができます。次に、両方の方法からアクセスできます。

class XYZ 
{ 

    var button: UIButton? 

    func createButton() { 
     self.button = UIButton() 
     // Some code to modify image of button 
     self.button.addTarget(self, action: "fade", forControlEvents: .TouchDown) 
     self.view.addSubview(self.button) 
     // Some code to add constraints  
    } 

    func fade() { 
      UIView.animeWithDuration(5, animations: { 
       self.button.alpha = 0 
    } 
} 

またhereはスウィフトのオブジェクトのスコープと寿命についての記事です。

これが役に立ちます。

+0

私は実際には、関数が呼び出されるたびに(さまざまな名前の)ボタンを作成したかったのです。これは可能でしょうか? – fossdeep

+0

@fossdeepそれはPhilippの答え​​がするものです。 *クラスのルートにあるオプションボタンを宣言してから、関数のボタンを作成し、宣言された変数にボタンを割り当てます。 – Moritz

+0

ああ、私は参照してください。今は理にかなっている。ありがとうございました。 – fossdeep

関連する問題