2017-01-26 8 views
0

最後の表のセルの下にプラスボタンを追加したいとします。私はこのコードを使用し、この結果を得るにはUITableViewのフッタービューにボタンを追加する方法は、最後のセル区切りを保持しますか?

enter image description here

:それは次のようになります

let footerView = UIView() 
tableView.tableFooterView = footerView 

addButton.frame = CGRect(x: 0, y: 0, width: 45, height: 45) 
addButton.setTitle("+", for: []) 
addButton.titleLabel?.font = UIFont.systemFont(ofSize: 30) 

footerView.addSubview(addButton) 

addButton.addTarget(self, action: #selector(addSection), for: .touchUpInside) 

フッタービューがゼロを持っているとして、それは私がそれをしたい正確にどのように見えますが、問題がありますフレーム内のプラスボタンはタッチイベントに反応しません。

私はフッタービューに枠を設定した場合:

let footerView = UIView(frame: CGRect(x: 0, y: 0, width: 45, height: 45)) 

ボタンがタッチに対応するために開始しますが、最後のセルの区切り線がなくなっている:

enter image description here

がありますインタラクティブなコンテンツをテーブルのフッタービューに追加するが最後の区切り線は保持する方法

+0

これは厳しいかもしれません。 FooterView(sepratorView、yourButton)のようなビューを追加することができます。 – rptwsthi

+0

あなたはセパレータを自分で描くことを意味しますか?私はそれができることを知っている。私はちょうどもっと標準的な解決策があると思った。 –

+0

また、カスタムセパレータを使用している場合は、テーブルの編集(セルの移動と削除)に関連するすべてのロジックを処理する必要があります。 –

答えて

0

このようにfooterViewの上に行を追加します。必要に応じてxの値を設定します。

let line = UIView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: 1)) 
line.backgroundColor = UIColor.gray 
footerView.addSubview(line) 
+0

私はこれについて考えましたが、テーブルを編集するときにこのセパレータラインで何らかの論理(アニメーション)が起こっています。そして私はそれを自分で実装したくありません。 –

0

これを行う最も信頼性の高い方法は、デフォルトの区切り線を使用せず、手動でセルに追加することです。

var separator:UIView! 
    if let s = cell.viewWithTag(1000) 
    { 
     separator = s 
    } 
    else 
    { 
     separator = UIView() 
     separator.tag = 1000 
     separator.backgroundColor = TheColorYouWantForYourSeparator 
     separator.translatesAutoresizingMaskIntoConstraints = false 
     cell.addSubview(separator) 

     // Swiper constraints 
     let leadingConstraint = NSLayoutConstraint(item: separator, attribute: .leading, relatedBy: .equal, toItem: cell, attribute: .leading, multiplier: 1, constant: 15) 
     let heightConstraint = NSLayoutConstraint(item: separator, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1, constant: 0.5) 
     let bottomConstraint = NSLayoutConstraint(item: cell, attribute: .bottom, relatedBy: .equal, toItem: separator, attribute: .bottom, multiplier: 1, constant:0) 
     let trailingConstraint = NSLayoutConstraint(item: cell, attribute: .trailing, relatedBy: .equal, toItem: separator, attribute: .trailing, multiplier: 1, constant: 15) 
     cell.addConstraints([bottomConstraint, leadingConstraint, heightConstraint, trailingConstraint]) 
    } 

セルを返す直前にこのコードをセルにコピーするだけで、設定可能なセパレータビューが作成されます。制約を使用して形状を決定します。

+0

はい私はセパレータビューを自分で作ることができますが、私はしたくありません。セルの底にラインを追加するのはそれほど単純ではありません。また、セルの選択、移動、削除などのケースを処理することも含まれます。よりシンプルな解決策が存在するはずです。 –

+0

このソリューションは、常にこの行が必要なので、余分な処理を必要としません。 (テーブルビューの区切り線を無効にすることを忘れないでください)セルが最後のものであっても。または私はあなたの問題を誤解しましたか? –

+0

いいえ、標準のセパレータが常に表示されるとは限りません.1 - 行を選択すると、上下のセパレータが非表示になります。 2 - 編集モードで行を移動すると、移動した行の区切り文字は非表示になりますが、行を挿入する行のプレースホルダに表示されます。たぶん、他のケースがあるかもしれません。 –

関連する問題