###はじめに
SwiftでiOSのアプリを開発しています。初心者です。
こういった質問サイトへの投稿経験も浅いため、マナーや通例に反した質問をしてしまっているかもしれません。
もしかすると、お門違いな点もあるかと思いますが、ご容赦願います。
###本題
所定のボタンを押すことで、xibで作成したTableViewCell(カスタムクラス : CustomTableViewCell.swift)の中に、xibで作成したView(カスタムクラス : CustomView.swift)を追加(addSubview)しようとしています。
しかし、以下問題が生じています。解決方法を教えてください。
CustomTableViewCell.swift
class CustomTableViewCell: UITableViewCell { @IBOutlet weak var viewInCell: UIView! override func awakeFromNib() { super.awakeFromNib() // Initialization code } override func setSelected(selected: Bool, animated: Bool) { super.setSelected(selected, animated: animated) // Configure the view for the selected state } }
CustomView.swift
import UIKit class CustomView: UIView { /* // Only override drawRect: if you perform custom drawing. // An empty implementation adversely affects performance during animation. override func drawRect(rect: CGRect) { // Drawing code } */ class func instance() -> CustomView { return UINib(nibName: "CustomView", bundle: nil).instantiateWithOwner(self, options: nil)[0] as! CustomView } }
**(詳細1)**CustomTableViewCellの中にViewを配置して、CustomTableViewCell.swiftにアウトレット接続しています。そして、 TableViewが配置されているViewController(MyViewController.swift)に、ボタンをアクション接続し、そのメソッドの中に、「"特定のセル"の(アウトレット接続した)Viewに、CustomViewをaddSubViewする」記述を書いています。
**(詳細2)**上記の特定のセルはTableViewの「visibleCells」プロパティで取得しています。
MyViewController.swift
@IBAction func testBtn(sender: UIButton) { for cell in self.tableView.visibleCells as! [CustomTableViewCell]{ let myView = CustomView.instance() cell.viewInCell.frame = myView.frame cell.viewInCell.addSubview(myView) } }
###発生している問題
1.addSubviewしたCustomViewが、CutomTableViewCellで定義したViewをはみ出て表示される。
ちなみに、CustomTableViewCell内の「awakeFromNib()」で、以下の様にaddSubviewした場合は、
let myView = CustomView.instance() cell.viewInCell.frame = myView.frame cell.viewInCell.addSubview(myView)
Viewをはみ出ることなく表示されます。
2.スクロールすると、addSubviewしたCustomViewが「visibleCells」で取得したセル以外のセルに反映される。また、スクロールして戻ってくると、そのCustomViewが消えていたりする。
こちらのサイト(http://ios-practice.readthedocs.org/en/latest/docs/tableview/)に、それらしき記述はあるのですが、Objective-cの知識がないことと、私の読解力のなさから自分のコードに適用するに至っておりません。また、これが本質的な解決方法であるのかも判断できていません。
###補足情報(言語/FW/ツール等のバージョンなど)
Xcode version7.1.1
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/12/01 12:29