2016-03-29 15 views
2

私はUIScrollViewをセットアップしており、addSubViewを使用して5つのボタンを追加しています。ここに私のviewDidLoad内のコードです。Swift - 追加されたばかりのボタンの右側にボタンを自動的に追加する

let codedButton:UIButton = UIButton(frame: CGRectMake(0, 0, 100, 50)) 
    codedButton.backgroundColor = UIColor.redColor() 
    codedButton.setTitle("Button 1", forState: UIControlState.Normal) 
    codedButton.addTarget(self, action: #selector(ViewController.buttonAction(_:)), forControlEvents: UIControlEvents.TouchUpInside) 
    codedButton.tag = 1 
    self.buttonScrollView.addSubview(codedButton) 

    let codedButton2:UIButton = UIButton(frame: CGRectMake(110, 0, 100, 50)) 
    codedButton2.backgroundColor = UIColor.redColor() 
    codedButton2.setTitle("Button 2", forState: UIControlState.Normal) 
    codedButton2.addTarget(self, action: #selector(ViewController.buttonAction(_:)), forControlEvents: UIControlEvents.TouchUpInside) 
    codedButton2.tag = 2 
    self.buttonScrollView.addSubview(codedButton2) 

(5までのすべての方法)

私は助けが必要な問題が...最終的には、これらのボタンは、動的に表示されますされています。 CGRectMakeのX値を調整して、作成したばかりのボタンの右に新しいボタンを自動的に "浮動"させるにはどうすればよいですか?上のコードでは、明示的にXの位置を示していますが、これらのボタンがコード内で動的に作成されると正しく動作しません。

EDIT 私の質問を明確にするために: 私は画像を添付しました。 2 3 4または5があるかどうかに関わらず、ボタンは常に水平方向に/ の次ののように互いに重なり合っています。これらのボタンは動的に表示されます。したがって、私が上で提供したコードの試行では、ボタンをX軸に配置する場所を明示的に設定しているため、機能しません。

下記の画像のようにコードを修正する必要があります。 I need my code edited so that it automatically stacks the new buttons horizontally.

+0

.. wiを記述してくださいあなたが欲しいものをもう少し詳しくお聞かせください。ボタンにコードを追加すると、ボタンのサイズが動的に変更されますか? – user3138007

+0

..または新しいボタンを最後のボタンのすぐ隣に配置しますか? – user3138007

答えて

1

これはプログラムによって実行されています。私はコードを助けることはできませんが、ストーリーボードのスタックビューは素晴らしいです。私は4つのボタンを持っている私のアプリの機能を持っていますが、ユーザーは4つのボタンのうちの2つだけを見ることができます。

1)すべての5つのボタン

を選択します(Xcodeのは、それはむしろ垂直よりも水平方向のだ認識できるように、彼らはちょうど足りるだけの、完全に整列する必要はありません。

2)水平にストーリーボードにボタンを追加します。

3)Xcodeの右下隅にあるスタックビューボタンをクリックします(4つの水平線と矢印が下にあるボタン

4)属性インスペクタで、horizo​​ntalを軸として選択します。比例的に塗りつぶし、間隔を空けて演奏し、モードとして塗りつぶす尺度を選択します。

5)Swiftファイルでは、ボタンを使用してボタンを追加または非表示にすることができます。隠された=真/偽

注:私は最後に以下

+0

私はこれについてさらに研究するつもりです。 ios9は、macrumorsによると、75%のiosデバイスでアクティブになっているため、これは実行可能なソリューションになる可能性があります。 – Joe

+0

右私が店内に持っている別のアプリは、iOS 9ユーザーだけが利用可能ですが、ほとんどの人はそれに関係しています。 –

0

私はそれがあなたが求めているものかどうかは正確にはわかりません。そうでない場合は、コメントを残してください。

counterを作成し、ボタンに名前を付ける...

button.name = "name\(counter)"

は、あなたの新しいボタンの位置を設定します。..

let position = self.childNodeWithName("name\(counter)")?.position 

を使用して、最後のボタンの位置を取得します。..

newButton.position = CGPointMake(position.x + newButton.frame.size.width/2 + oldButton.frame.size.width/2, position.y) 

..あなたの新しいボタンが今すぐ追加された最後のボタンに設定されました

+0

私が現在持っているコードの中にあなたのコードを実装する方法がわかりません。私は、私が達成する必要があることをより明確にするために、最初の投稿を編集しました。 – Joe

1

を確認したときにのみ、iOSの9で使用可能なビューを積み重ねることに注意してください追加するボタン一つのあなたの現在の実装に追加することができますループの例ですボタンの数は、buttonListという配列に追加するボタン名の数に依存します。ループの反復ごとに、ButtonList内のテキストからボタンの名前を付け、タグを配列のインデックスに設定します。次に、フレームのx座標を計算します。この例では、各ボタンを100ピクセル幅にし、その間にx座標の0から始まる10ピクセルのスペースがあります。最初のボタンとx座標を計算するときには、x座標を計算する際にインデックスをインクリメントするだけです。 let xCoord = CGFloat(index*buttonWidth + (index+1)*buttonSpace) さらにスクロールビューのサイズを増やす必要があります。スクロールビューの幅(スクロールビューに先行スペースを追加する場合は、ボタンのスペース幅を1増やします):buttonScrollView.contentSize = CGSizeMake(CGFloat((ButtonList.count * buttonWidth) + ((ButtonList.count + 1) * buttonSpace)), 50)

var ButtonList = ["Button 1", "Button 2", "Button 3"] 
let buttonWidth = 100 
let buttonSpace = 10 
for (index,ButtonText) in ButtonList.enumerate(){ 
    //calculate the x coordinate of each button 
    let xCoord = CGFloat(index*buttonWidth + index*buttonSpace) 
    let codedButton:UIButton = UIButton(frame: CGRectMake(xCoord, 0, 100, 50)) 
    codedButton.backgroundColor = UIColor.redColor() 
    codedButton.setTitle(ButtonText, forState: UIControlState.Normal) 
    codedButton.addTarget(self, action: #selector(ViewController.buttonAction(_:)), forControlEvents: UIControlEvents.TouchUpInside) 
    codedButton.tag = index 
    self.buttonScrollView.addSubview(codedButton) 
    } 
+0

私はこのプロジェクトで私が質問を投稿してからしばらくお待ちしていますが、方法!ご清聴ありがとうございます。 – Joe

+0

私は残念なことに質問が数ヶ月間であったことに気がつきましたが、私は自分のプロジェクトで同じボタンレイアウトを実装しようとしているこのポストを見つけたので、解決策を投稿すると思ったので、 。 – element4lifex8

関連する問題