2017-01-12 4 views
0

これは、スタックオーバーフロー(これはiOS/Swiftの初心者です)と同様のさまざまな質問を見て、助けてくれたしかし、今私の質問は実際には次のようになります。画像が入ったボタンを正しく作成するには

最初のものは、viewDidLoadメソッド内で関数をネストすることができるかどうかです。 func createButtonとして試してみると、2つの異なる新しいボタンも表示されません。実際、ストーリーボードを使って追加した特異な画像以外は何も表示されません。

2番目の質問は、画像を参照する正しい方法です。コードを実行しようとすると、単に青い背景を持つ2つのボタンが作成されるためです。これに対する拡張は、自分自身の関数を参照する有効な方法が何であるか分かりませんので、ボタン作成の "アクション:"部分の正しい構文は何ですか。

コードは以下の通りです:

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

     var imageNames : [String] = ["dino2Button", "dino3Button"] 
     var yposition : Int = 133 
     let xposition : Int = 112 
     let width : Int = 150 
     let height : Int = 113 

     //func createButton() { 
      for index in 0...1 { 
       print("index is: \(index)") 
       let image = UIImage(named: imageNames[index]) as UIImage? 
       let button = UIButton(type: .roundedRect) as UIButton 
       button.frame = CGRect(x: xposition, y: (yposition+10), width: width, height: height) 
       yposition += height + 10; 
       button.setImage(image, for: .normal) 
       button.addTarget(self, action: "", for: .touchUpInside) 
       self.view.addSubview(button) 

      } 
     //} 


    } 

そして再び、私は2日間の総計のためのiOSをやってきました。

+0

いくつかの問題がここで間違っています。まず、おそらく最前線 - iOSとスウィフトを学ぶのに2日間しかかからないのであれば、フレームの代わりに自動レイアウトを学ぶために**今**の時間を費やすことを検討してください。デバイスごとにフレームサイズが異なり、自動レイアウトは非常に価値があります。第二に、空白のイメージが表示されている理由は、UIImageがゼロであるためです。大文字小文字を含めてスペルを確認してください。また、ファイル拡張子なしで動作する唯一のUIImage(名前:)は、PNGです(大文字と小文字も区別されます)。 .jpgの場合は、「.jpg」を追加する必要があります。 – dfd

+0

第3に、addTargetのアクションはSelectorタイプなので、構文的にmakeは**#selector(myFunc)**となり、** print( "got here")**などの単純なfuncを追加して、正しくがんばろう! – dfd

+0

@dfd役に立つポインタをありがとう。明らかに私の問題は、単に.setImageではなくbutton.setBackgroundImageであるはずだったということでした。彼らのタイプは.jpgであっても.pngではないかもしれないが(私はそれをまだチェックしていないと思う)。私は確かに自動レイアウトを調べます。また、iOS向けに開発するときのストーリーボードは、レイアウトのために頻繁に使用されるか、ストーリーボードとコードのバランスの取れた組み合わせですか?乾杯! – SomeStudent

答えて

0

はい非同期操作を実行していない限り、ビューがロードされた関数をネストすることは可能です。彼らがそうであるならば、あなたはあなたの意見が現れる前に彼らが終わることを保証できないことに気づかなければならない。しかし、これ以外に、入れ子関数に関する実際の問題はありません。

EDIT:ボタンにアクションを追加するには

button.setImage(UIImage(named: "checkbox_off"), for: .normal) 
button.setImage(UIImage(named: "checkbox_on"), for: .selected) 
button.setImage(UIImage(named: "checkbox_on"), for: .highlighted) 

:あなたのボタンに画像を追加するにはリンゴにdocuments

をチェックし、それはこのように書き

button.addTarget(self, action: #selector(CheckBox.touchUpInside(_sender:)), for: .touchUpInside) 

CheckBoxはあなたのクラス名です(ボタンが置かれているか、あなたが呼びたいものがあり、ターゲットはpoiです)。 (この場合は「自己」)

func touchUpInside(_sender: Any?) { 

    self.isSelected = !(self.isSelected) 

} 
+0

これで、ボタンの動作を次のようにして確認できました:#selector(clicky(sender :))。 Javaの世界から来て、すべてがクラスである人として、私のCheckBoxクラス名はこの場合どのようなものになりますか?また、私は自分のボタンの背景画像を正しく設定しようとしていませんが、それは単にブルースクリーンとして表示しているからです。 – SomeStudent

+0

まあ、私は気になるでしょう、それはbutton.setBackgroundImageでした。私が見た他のすべての答えは、それがちょうどbutton.setImage – SomeStudent

+0

として設定されていたが、そのどちらかですが、彼らは異なることを行います。背景イメージは、テキストをinfrontに、イメージを背景にします。設定されたイメージはイメージを実際のボタンにします。 – Pochi

関連する問題