2016-04-19 17 views
0

stackViewオブジェクトが与えられた場合、取得専用プロパティであるstackView.arrangedSubviews
という配列が得られます。したがって、私は単に私がnewSubViewの内容とstackView.arrangedSubviews[i]の基準の内容を交換したいされているもの、私の頭に浮かんだ即時にオブジェクトの参照内容を変更する

stackView.arrangedSubviews[i] = newSubView 

を行うことによって、それの一つの項目を置き換えることはできません。これはCにあった場合たとえば、私は

*arrangedSubViews[i] = *newSubView 

ような何かをやっているだろう、私はarrangedSubViewsを削除し、addArrangedSubViewを利用して、私は必要なものを行うための方法がある知っているが、それは非常に効率的ではありません。

答えて

0

変更不可能な配列を変更することはできません。これは多くの点で優れています。

stackView.replaceView(atIndex: i, withView: newSubView) 

パフォーマンス・ワイズ負の影響はありません:あなたはこのコードを使用することができます代わりにstackView.arrangedSubviews[i] = newSubViewを使用しての、そして、

@available(iOS 9.0, *) 
extension UIStackView { 
    func replaceView(atIndex index: Int, withView view: UIView) { 
     let viewToRemove = arrangedSubviews[index] 
     removeArrangedSubview(viewToRemove) 
     insertArrangedSubview(view, atIndex: index) 
    } 
} 

次のような見解を交換するために拡張メソッドを作成することができますこのようにして

+0

私は時間を捧げてくれてありがとう。私はそれがget-onlyプロパティだと言いました。左側に 'arrangedSubviews'を置くことはできません。そしてBTWはそれが可変配列です:)。 –

+0

@ user5526180あなたのニーズに合っているかどうか私の編集を見てください。 – redent84

+0

Oohhには配置されたサブビューのための削除と挿入があります。本当にありがとう。私のコードでそれを使わないことに決めたにもかかわらず、私は避けたかった「非効率的な」方法を選択しました。これらの関数を使用すると、スタックビューに追加するビューが混乱するように見えるためです。スウィフトは本当にうんざりです。私はそれから始まって何度も後悔しています。 Androidが良かったです –

関連する問題